Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript或jquery从select下拉列表中删除重复项_Javascript_Jquery_Html - Fatal编程技术网

使用javascript或jquery从select下拉列表中删除重复项

使用javascript或jquery从select下拉列表中删除重复项,javascript,jquery,html,Javascript,Jquery,Html,我有一个选择下拉字段,它是根据位置从数据库动态创建的。由于创建的方式,它会导致下拉列表中列出重复的位置 <label for="club_feed_town">Location:</label> <select id="locationList" name="club_feed_town"> <option value="">All Locations</option> <option value="Andover

我有一个选择下拉字段,它是根据位置从数据库动态创建的。由于创建的方式,它会导致下拉列表中列出重复的位置

<label for="club_feed_town">Location:</label>
<select id="locationList" name="club_feed_town">
    <option value="">All Locations</option>
    <option value="Andover">Andover</option>
    <option value="Andover">Andover</option>
    <option value="Bishops waltham">Bishops waltham</option>
    <option value="Blandford forum">Blandford forum</option>
    <option value="Boscombe">Boscombe</option>
    <option value="Bournemouth">Bournemouth</option>
    <option value="Bournemouth">Bournemouth</option>
    <option value="Etc">Etc</option>
</select>
是否有人知道是否有一种方法可以在页面上使用一些代码来检查下拉列表中的重复项并从菜单中删除任何重复项

提前感谢,


Tom使用jQuery和临时数组来存储值或文本非常简单

以下假设值重复

var optionValues =[];
$('#selectID option').each(function(){
   if($.inArray(this.value, optionValues) >-1){
      $(this).remove()
   }else{
      optionValues.push(this.value);
   }
});

我以为你想要这样的东西

  <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
    <select id="select_id">
        <option>abc</option>
        <option>abc</option>
        <option>bcd</option>
        <option>xyz</option>
        <option>bcd</option>
        <option>xyz</option>
    </select>
    <script type="text/javascript">
    var opt = {};
    $("#select_id > option").each(function () {
        if(opt[$(this).text()]) {
            $(this).remove();
        } else {
            opt[$(this).text()] = $(this).val();
        }
    });

    </script>

如果顺序不重要,您可以尝试这个jQuery代码段

$("form select option").each(function(){
    var value = $(this).val();
    var elems = $("form option[value="+value+"]");
    if (elems.length > 1) {
        elems.remove();
        $("form select").append("<option value="+value+">"+value+"</option>");
    }
});

如果可以编辑查询,请在对数据库的查询中使用DISTINCT关键字,这样它就不会重复相同的位置。

通常问题不在客户端,而在数据库端 如果选择不尖锐,则不值得清洗选择

Select DISTINCT(var) from X; 

应该比JavaScript中的新函数工作得更好,这是一个没有jQuery的现代JS解决方案:

const options = []

document.querySelectorAll('#locationList > option').forEach((option) => {
    if (options.includes(option.value)) option.remove()
    else options.push(option.value)
})

基于选项的值、它的innerHTML或两者都复制?至少共享一些代码。抱歉,如果这不清楚,请将代码添加到问题中。谢谢您的建议,但当我按如下方式添加代码时,它似乎不起作用。有什么想法吗?var optionValues=[];$'locationList options'.eachfunction{if$.inaraythis.value,optionValues>-1{$this.remove}else{optionValues.pushthis.value;};我在选择器中有输入错误。。。删除选项末尾的s。标记为。。演示: