Javascript 如何按字母顺序对包含optgroup的select进行排序?

Javascript 如何按字母顺序对包含optgroup的select进行排序?,javascript,jquery,bootstrap-selectpicker,Javascript,Jquery,Bootstrap Selectpicker,我有以下引导选择器。我想按字母顺序对所有选项和optgroup进行排序。我的代码似乎不适用于选择器选择器,也不适用于正常的select。有人知道怎么做吗 var options=$('select option'); var arr=options.map(函数(u,o){return{t:$(o).text(),v:o.value};}).get(); arr.sort(函数(o1,o2){返回o1.t>o2.t-1:o1.t{ 如果(a.标签b.标签){ 返回1 } 返回0; }) 返回a

我有以下引导选择器。我想按字母顺序对所有
选项
optgroup
进行排序。我的代码似乎不适用于选择器选择器,也不适用于正常的
select
。有人知道怎么做吗

var options=$('select option');
var arr=options.map(函数(u,o){return{t:$(o).text(),v:o.value};}).get();
arr.sort(函数(o1,o2){返回o1.t>o2.t-1:o1.t

阿马尔菲海岸
阿普利亚
阿雷佐
阿金塔里奥
基安蒂
佛罗伦萨
卢卡;比萨
马雷玛
锡耶纳
瓦尔多西亚酒店
卡普里岛
西兰托海岸
科莫湖
加尔达湖
伊斯基亚岛
马焦雷湖
罗马城
西西里岛
索伦托海岸
翁布里亚

你可以用香草JS这样做。我在下拉列表中放置了一些最后的项目作为第一个项目,只是为了演示

如果您给所有这些标签,那么您可以这样做:

函数sortStuff(arr){
arr.sort((a,b)=>{
如果(a.标签b.标签){
返回1
}
返回0;
})
返回arr
}
var select=document.querySelector('select')
var options=[…select.children]
var sortedOptions=sortStuff(选项)
select.innerHTML=“”
sortedOptions.forEach(i=>select.append(i))
sortedOptions[0]。setAttribute('selected','true')

翁布里亚
索伦托海岸
阿马尔菲海岸
阿普利亚
阿雷佐
阿金塔里奥
基安蒂
佛罗伦萨
卢卡;比萨
马雷玛
锡耶纳
瓦尔多西亚酒店
卡普里岛
西兰托海岸
科莫湖
加尔达湖
伊斯基亚岛
马焦雷湖
罗马城
西西里岛

您是如何将该排序应用于
选项的?@freedomn-m我更新了代码段我已将jquery添加到代码段中,以便它可以运行,并可以随意删除
。无论使用什么
选择器,它都可以找到您的
选择
(或者可以添加
class='which'
-现在应用排序。您能否提供有关它如何不做您想要的事情的详细信息(您的预期输出与它所做的事情比较).例如,如果您希望将optgroup中的项目从主目录中排除sort@freedomn-m我明白了,谢谢,基本上返回的结果是错误的,因为
Tuscany
应该放在
Sorrento
之后“optgroup被跳过”-因为您的选择器使用了
选择选项
,而
optgroup
不是
选项
。您不能使用相同的排序,因为您更改的是值+文本,而不是对DOM节点进行排序。谢谢您的回答,但结果不正确,正如您从代码段中看到的那样,肯定@sfarzoso的结果不是按字母顺序排列。I reali我也这么认为,所以我更新了答案,现在它将把托斯卡纳放在正确的位置。试试看=)你只需要给他们所有的标签Yebo是的,我做了。也许只是刷新一下??我认为托斯卡纳是翁布里亚之前的第二个最后一个检查:你能在外面做一把小提琴吗?好的@sfarzoso,很抱歉这么来来回回。它现在在下拉列表中重新排列它们,所以它应该工作得很好。