DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>左右移动选项案例title>
<script src="../jquery.js">script>
<style>
select,div{
float: left;
margin-top: 100px;
margin-left:100px ;
}
style>
head>
<body>
<select id="first" size="5" multiple>
<option>Argentinaoption>
<option>Braziloption>
<option>Canadaoption>
<option>Chileoption>
<option>Chinaoption>
<option>Cubaoption>
<option>Denmarkoption>
<option>Egyptoption>
<option>Franceoption>
<option>Greeceoption>
<option>Spainoption>
select>
<div>
<button id="add">>button>
<button id="add_all">>>button>
<button id="remove"><button>
<button id="remove_all"><<button>
div>
<select id="second" size="5" multiple>select>
<script>
//DOM操作
// var add =document.getElementById('add')
// add.addEventListener('click',function(){
// //获取左边被选中的选项,移动到右边
// var first=document.getElementById('first');
// var opts=first.getElementsByTagName('option');
// for(var i=0;i
// var opt=opts[i];
// if (opt.selected){
// var second=document.getElementById(('second'));
// second.appendChild(opt);
// i--;
// }
// }
// });
//jQuery操作
$('#add').click(function(){
$('#first>option:selected').appendTo($('#second'));
});
$('#add_all').click(function(){
$('#first>option').appendTo($('#second'));
});
$('#remove').click(function(){
$('#second>option:selected').appendTo($('#first'));
});
$('#remove_all').click(function(){
$('#second>option').appendTo($('#first'));
});
script>
body>
html>

问题: 每次移动option之后 为移动的option都会被补上去,所以在循环中 如果选中全部option则将只有六次循环且不是连续的六个
第一个option被移动,剩下集合中的第二个option元素被移动
解决办法:
在for循环中加入语句i–
使i每次都是从0开始
第二种解决方法:
倒序来排列
var add =document.getElementById('add')
add.addEventListener('click',function(){
//获取左边被选中的选项,移动到右边
var first=document.getElementById('first');
var opts=first.getElementsByTagName('option');
for(var i=opts.length-1;i>=0;i--){
var opt=opts[i];
if (opt.selected){
var second=document.getElementById(('second'));
second.appendChild(opt);
}
}
});
记住,风筝逆风而飞。