以下是一个使用HTML和JavaScript实现两个多选(select)框之间选项相互移动的基本示例。在这个示例中,我们创建了两个`select`元素,分别用于表示源列表和目标列表,并提供了两个按钮用于将选项从一个列表移动到另一个列表。
HTML 部分:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>选项移动示例</title>
</head>
<body>
<select id="source" multiple size="5">
<option value="1">选项1</option>
<option value="2">选项2</option>
<option value="3">选项3</option>
<option value="4">选项4</option>
</select>
<button onclick="moveSelectedOptions('source', 'target')">移动到目标</button>
<button onclick="moveSelectedOptions('target', 'source')">移回源</button>
<select id="target" multiple size="5">
<!-- 目标列表初始为空 -->
</select>
<script>
function moveSelectedOptions(fromId, toId) {
var fromSelect = document.getElementById(fromId);
var toSelect = document.getElementById(toId);
// 遍历源select框中的每个option
for (var i = fromSelect.options.length - 1; i >= 0; i--) {
// 如果该option被选中
if (fromSelect.options[i].selected) {
// 将其添加到目标select框的末尾
toSelect.add(fromSelect.options[i], null);
// 或者,如果你想要保持源select框的原始顺序不变,可以这样做:
// toSelect.add(fromSelect.options[i].cloneNode(true), null);
// 然后从源select框中移除它
// fromSelect.remove(i);
// 注意:上面的remove和add操作会影响循环的索引,因此我们从后向前遍历
}
}
}
</script>
</body>
</html>
注意:在这个示例中,为了简化代码和保持其简洁性,我没有在移动选项后立即从源`select`中删除它们。如果你希望这样做以保持列表的整洁,你可以取消注释相应的`remove`行。但是,由于这会影响循环的索引,所以我们从后向前遍历列表(即`for`循环中的递减索引)。
此外,我还添加了一个注释,展示了如何使用`cloneNode(true)`来克隆被选中的`option`元素,这样原始列表就不会丢失任何数据了。然而,这种方法需要你自己决定是否要在源列表中保留这些选项的副本。