Javascript sort()没有正确按字母顺序排列

时间:2013-01-28 20:59:43

标签: javascript jquery sorting

var ccArray = [];
ccArray = $("input:checkbox[name='multiselect_ddlCC']").sort();

我可以告诉我在数组中得到了我需要的值,但是在sort()运行之后,数组顺序被更改但不是按字母顺序。我得到了像ENG,ATL,NAS,CLT,BIM这样的东西。

有什么想法吗?

6 个答案:

答案 0 :(得分:5)

您必须对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

答案 1 :(得分:2)

您必须实际比较输入值,因为它们是字符串,您必须使用<>,因为减法将无法正常工作:

.sort(function (a, b) {
    if ($(a).val() < $(b).val()) {
       return -1;
    }
    else {
       return 1;
    }
});

http://jsfiddle.net/cdMBW/

答案 2 :(得分:1)

您正在排序jQuery包装的HTML元素,而不是字符串。谁知道哪一个按排序顺序排在另一个之前?

答案 3 :(得分:0)

如果您只想要一个选定复选框值的排序列表:

var values = [];
$('input:checkbox[name='multiselect_ddlCC']:checked').each(function(i,e){
  values.push(e.value);
});
var sortedValues = values.sort();

example included

答案 4 :(得分:0)

这应该有效:

jQuery.map(ccArray, function(item) { return item.value }).sort()

答案 5 :(得分:-1)

您需要使用.val()而不是元素本身对其值进行排序。

var ccArray = [];
ccArray = $("input:checkbox[name='multiselect_ddlCC']").val().sort();