繁体   English   中英

如何在JavaScript中删除下拉列表的未选择项目

[英]How to remove unselected items of dropdownlist in javascript

自一段时间以来,我一直在互联网上寻找这个问题。 我有一些水果的下拉列表。 从列表中选择一个项目后,其他项目应从列表中删除。 例如,如果选择了Apple,则应删除其他水果,而Apple仅应保留在列表中。 =>函数removeUnselectedOptions()执行不一致。 下面的代码:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Remove unselected items</title>
<script>
function removeUnselectedOptions() {
    var element = document.getElementById("fruitSelect");
    var length = element.length;
    var options = element.options;
    var selected = element.value;
    console.log(selected);
    console.log(length);
    var i = 0;
    do{
        console.log(i);
        console.log(options[i].value);
        console.log(selected);

        if(options[i].value != selected) {
            element.remove(i);
}
        i++;
   } while (i<length);
}
</script>
</head>

<body>
<form>

<br>
<select id="fruitSelect" size="5" onchange='removeUnselectedOptions();'>
    <option selected value="Select a fruit" >Select a fruit</option>
    <option>Apple</option>
    <option>Pear</option>
    <option>Banana</option>
    <option>Orange</option>
    </select>
    </form>
<br>
</body>
</html>

您可以将代码简化为以下代码,以获取所选元素的索引,然后向后循环以将其删除。 为什么倒退? 因为如果您向前循环(通常会这样做),则删除元素时索引会发生变化,并且最终会留下您可能注意到的选项。

 function removeUnselectedOptions() { var element = document.getElementById("fruitSelect"); var selected = element.selectedIndex; for (var i = element.length-1; i >= 0; i--) { if (i != selected) element[i].remove() } } 
 <form> <br> <select id="fruitSelect" size="5" onchange='removeUnselectedOptions();'> <option selected value="Select a fruit">Select a fruit</option> <option>Apple</option> <option>Pear</option> <option>Banana</option> <option>Orange</option> </select> </form> 

其他方式是:

function removeUnselectedOptions(){
    var element = document.getElementById("fruitSelect");
    var options = element.options;
    var i = 0;
    while (i < element.length){
        if(options[i].selected) {
            element.innerHTML = '<option value="'+options[i].label+'">'+
                options[i].label+
                '</option>';
            break;
        }
        i++;
    }
}

jsfiddle示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM