Javascript 将项目放置在数组的开头
我得到了一个select元素,包含多个项目。我应该将以“u”开头的值按字母顺序放在列表的开头。我试着用unshift()JavaScript方法来做,但没有成功。还有别的办法吗 html:Javascript 将项目放置在数组的开头,javascript,jquery,arrays,sorting,selection,Javascript,Jquery,Arrays,Sorting,Selection,我得到了一个select元素,包含多个项目。我应该将以“u”开头的值按字母顺序放在列表的开头。我试着用unshift()JavaScript方法来做,但没有成功。还有别的办法吗 html: 如您所见,它会对所有值进行置乱,并丢失对不带“.”的值的引用。按字母顺序来说,下划线已经优先于其他字符,并将使用通用的.sort()方法自动放在前面,因此这将为您提供正确的顺序: var a=[]; $('option')。每个(函数(){ a、 推送($(this.text()); }); a=a.sor
如您所见,它会对所有值进行置乱,并丢失对不带“.”的值的引用。按字母顺序来说,下划线已经优先于其他字符,并将使用通用的
.sort()
方法自动放在前面,因此这将为您提供正确的顺序:
var a=[];
$('option')。每个(函数(){
a、 推送($(this.text());
});
a=a.sort();
对于(i=0;i
_c
B
_五
A.
看看这个例子
var a=[];
$('option')。每个(函数(){
a、 推送($(this.text());
});
a、 排序();
对于(i=0;i
正如@Barmar所说的那样,。为你做这项工作吧 基于此插件,只要您的选项都是小写:
jQuery.fn.mysort = function() {
return this.pushStack( [].sort.apply( this, arguments ), []);
};
注意:虽然已经有了$.fn.sort
方法,但它不应该在库之外使用
$('option').mysort(function(a, b) {
var sa = $(a).text();
var sb = $(b).text();
return (sa < sb) ? -1 : (sa > sb) ? 1 : 0;
}).appendTo('select');
$('option').mysort(函数(a,b){
var sa=$(a).text();
var sb=$(b.text();
回报率(sasb)?1:0;
}).appendTo('select');
这将提取选项
标记,按内容对元素进行排序,然后简单地按新顺序将它们重新添加到选择
元素
请使用.map()
查看。如前所述,.sort()
在这种情况下将为您的应用程序做一切
var a=$('option').map(函数(){
返回此.outerHTML;
}).get().sort();
$('select').html(a.join(','))
_c
B
_五
A.
C
_a
我认为这是一个干净的解决方案:
var $select = $('select');
$select.children().sort(function(a, b) {
return a.innerHTML > b.innerHTML;
}).appendTo($select);
更新 如果您不想使用
$.fn.sort
(因为它应该只在内部使用),您可以执行以下操作:
_c
_c
_v
_v
$($select.children().get().sort(function(a, b) {
return a.innerHTML > b.innerHTML;
})).appendTo($select);
有关LcSalazar答案的更简洁版本:
var $o = $('option');
var a = $o.map(function() { return $(this).text() }).get().sort();
$o.text(function(n) { return a[n] } );
与他的答案一样,这有一种潜在的不良行为,即它将元素保留在适当的位置,但会洗牌它们的文本值 你所期望的是:-c-vab?@brunozrk是的_你不需要做任何特别的事
a.sort()
会将放在字母之前。问题是a.unshift()
正在从数组中删除元素。你为什么用这个?嗯,我觉得这有点老套。它是在洗牌选项的内容
元素,而不是洗牌元素本身。@Alnitak-我完全同意。我不想进入这件事,因为这不是问题的重点,但显然是一个有效的重点,OP应该考虑到这一点。@Alnitak-在更新的答案上检查一种奇特的方式!更好,除了:1.sort
不是受支持的jQuery函数,2。无需分离
-每个节点在附加后都会自动分离。如果.sort
是一种官方支持的方法,那将非常干净。消息来源说,$.fn.sort
是“仅供内部使用”。另一个问题是,排序可能不是确定性的,因为它只返回true或false(或者在转换回数字时返回“1”和“0”)。如果A
,则正确的排序函数也应返回-1。
var $select = $('select');
$select.children().sort(function(a, b) {
return a.innerHTML > b.innerHTML;
}).appendTo($select);
$($select.children().get().sort(function(a, b) {
return a.innerHTML > b.innerHTML;
})).appendTo($select);
var $o = $('option');
var a = $o.map(function() { return $(this).text() }).get().sort();
$o.text(function(n) { return a[n] } );