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

我可以说我在数组中得到了我需要的值,但是在 sort() 运行之后,数组顺序发生了变化,但不是按字母顺序排列的。我得到类似 ENG、ATL、NAS、CLT、BIM 的东西。

有任何想法吗?

4

6 回答 6

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

于 2013-01-28T21:03:36.770 回答
2

您必须实际比较输入值,并且由于它们是您必须使用的字符串,<否则>减法将无法正常工作:

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

http://jsfiddle.net/cdMBW/

于 2013-01-28T21:06:04.723 回答
1

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

于 2013-01-28T21:03:03.840 回答
0

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

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

包括的例子

于 2013-01-28T21:12:55.923 回答
0

那应该有效:

jQuery.map(ccArray, function(item) { return item.value }).sort()
于 2013-01-28T21:17:17.780 回答
-1

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

var ccArray = [];
ccArray = $("input:checkbox[name='multiselect_ddlCC']").val().sort();
于 2013-01-28T21:03:04.497 回答