var ccArray = [];
ccArray = $("input:checkbox[name='multiselect_ddlCC']").sort();
我可以说我在数组中得到了我需要的值,但是在 sort() 运行后,数组顺序发生了变化,但没有按字母顺序。我得到像ENG,ATL,NAS,CLT,BIM这样的东西。
有什么想法吗?
您必须对 DOM 元素进行排序并重新附加它们。
var $els = $("input:checkbox[name='multiselect_ddlCC']");
var $sorted = $($els.toArray().sort(function(a, b) {
return a.value > b.value;
}));
$els.replaceWith($sorted);
编辑:刚刚测试了replaceWith
,它不起作用,我的错。这工作正常:
$els.each(function(i) {
$(this).after($sorted.eq(i));
});
演示:http://jsbin.com/agizoy/1/edit
您必须实际比较输入值,并且由于它们是字符串,因此您必须使用<
或>
,因为减法将无法正常工作:
.sort(function (a, b) {
if ($(a).val() < $(b).val()) {
return -1;
}
else {
return 1;
}
});
http://jsfiddle.net/cdMBW/
你正在对 jQuery 包装的 HTML 元素进行排序,而不是对字符串进行排序。 谁知道其中哪一个按排序顺序排在另一个之前?
如果您只想要选定复选框值的排序列表:
var values = [];
$('input:checkbox[name='multiselect_ddlCC']:checked').each(function(i,e){
values.push(e.value);
});
var sortedValues = values.sort();
包含的示例
这应该有效:
jQuery.map(ccArray, function(item) { return item.value }).sort()
您需要使用 .val() 而不是元素本身对它们的值进行排序。
var ccArray = [];
ccArray = $("input:checkbox[name='multiselect_ddlCC']").val().sort();