我是 JQuery 的新手,一般来说是编程,但最近几天一直在试验它,因此可以按字母顺序对多个选择选项下拉列表进行排序。我想出了一个解决方案,但我确信有一种更有效的方法来编写它,但目前它超出了我的范围。如何在不直接调用它们的情况下完成每个选择?它需要在没有用户交互的情况下在页面加载时发生。
window.addEventListener("load", function () {
$("select[name='properties[Flavour 1]']").html($("select[name='properties[Flavour 1]'] option").sort(function (a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))
$("select[name='properties[Flavour 1]']").get(0).selectedIndex = 0;
//Flavour 2
$("select[name='properties[Flavour 2]']").html($("select[name='properties[Flavour 2]'] option").sort(function (a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))
$("select[name='properties[Flavour 2]']").get(0).selectedIndex = 0;
//Flavour 3
$("select[name='properties[Flavour 3]']").html($("select[name='properties[Flavour 3]'] option").sort(function (a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))
$("select[name='properties[Flavour 3]']").get(0).selectedIndex = 0;
}, false);
这一直持续到 flavor 12,但您了解它是如何设置的。
最佳答案
这应该给你一个通用的解决方案,我添加了一个包装器,这样我就可以获得计数而不是对数字进行硬编码或污染全局 DOM。我添加了文档级替代方案,但如果可以,请将其删除。
注意:经过仔细考虑后,我注意到您的“Flavours”拼写并得出结论认为这可能需要一些本地化,因此,我修改了排序以改为使用它。
返回 a.text.localeCompare(b.text);
我还添加了类来显示那些被保留的以及任何选定的默认调整以保留先前的值。
对于第二个示例,我将所有内容压缩为一个较短的 jQuery 版本,展开它可以在那里看到它。
window.addEventListener("load", function() {
let myflavours = $('#flavours').find('select[name^="properties[Flavour"]').length;
//alternate
let myflavoursNotAsGood = $(document).find('select[name^="properties[Flavour"]').length;
console.log(myflavoursNotAsGood);
for (let f = 1; f <= myflavours; f++) {
let sel = $("select[name='properties[Flavour " + f + "]']");
let v = sel.val();
let opts = sel.find("option").sort(function(a, b) {
return a.text.localeCompare(b.text);
});
sel.html(opts).val(v);
}
}, false);
.water {
color: blue;
}
.drink {
color: orange;
}
.yuk {
color: brown;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="flavours">
<select name='properties[Flavour 1]'>
<option>Cheese</option>
<option>Apple</option>
<option selected="selected">Cotton Candy</option>
<option>Blueberry</option>
<option class="yuk">Rotten Eggs</option>
<option class="water">Swamp Water</option>
<option class="water">Swamp Scum</option>
</select>
<select name='properties[Flavour 2]'>
<option>Cheese</option>
<option>Apple Smoked Bacon</option>
<option selected="selected">Blueberry</option>
<option class="yuk">Rotten Eggs</option>
<option class="drink">Bier</option>
<option>Bacon</option>
<option class="water">Swamp Water</option>
<option class="water">Swamp Scum</option>
</select>
</div>
第二个示例与您的稍有不同。
$(function() {
$('#flavours').find('select[name^="properties[Flavour"]')
.each(function(index, element) {
let v = element.value;
$(this).html($(this).find("option").sort(function(a, b) {
return a.text.localeCompare(b.text);
})).val(v);
});
});
.water {
color: blue;
}
.drink {
color: orange;
}
.yuk {
color: brown;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="flavours">
<select name='properties[Flavour 1]'>
<option>Cheese</option>
<option>Apple</option>
<option selected="selected">Cotton Candy</option>
<option>Blueberry</option>
<option class="yuk">Rotten Eggs</option>
<option class="water">Swamp Water</option>
<option class="water">Swamp Scum</option>
</select>
<select name='properties[Flavour 2]'>
<option>Cheese</option>
<option>Apple Smoked Bacon</option>
<option selected="selected">Blueberry</option>
<option class="yuk">Rotten Eggs</option>
<option class="drink">Bier</option>
<option>Bacon</option>
<option class="water">Swamp Water</option>
<option class="water">Swamp Scum</option>
</select>
</div>
关于javascript - 有效地对多个选择选项进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55539069/