开始的代码,使用for循环来一个个监测是否被选中:
- function moveOption2(sourceSelect, destSelect){
- var sourceOptions = sourceSelect.options;
- for(var i=sourceOptions.length-1; i>-1; i--){
- var option = sourceOptions[i];
- if(option.selected){
- var newOption = new Option(option.text, option.value);
- destSelect.add(newOption);
- sourceSelect.remove(i);
- destSelect.scrollIntoView(false);
- }
- }
- }
优化后的代码,只检查被选中的代码,巧妙的使用了selectedIndex的特性,每次上一个selected option被删除,则selectedIndex就变成下一个selected option的index值:
- function moveOption(sourceSelect, destSelect){
- var sourceOptions = sourceSelect.options;
- var removeIndex = sourceSelect.selectedIndex;
- while(removeIndex != -1){
- var removeOption = sourceOptions[removeIndex];
- var newOption = new Option(removeOption.text, removeOption.value);
- destSelect.add(newOption);
- sourceSelect.remove(removeIndex);
- removeIndex = sourceSelect.selectedIndex;
- }
- }