我如何对一组jQuery对象进行排序(但不是它们在DOM / Markup中的位置)

时间:2012-04-16 07:25:49

标签: javascript jquery sorting

我们有以下标记

<input type="checkbox" class="foo" />
<input type="checkbox" class="foo" />
<input type="checkbox" class="foo" />

在某些时候,我为每个实例注入一个data - keyValuePair(每个实例都是唯一的 - 我有几个调用 - 示例只涵盖一个赋值),如jQuery:

$('myMagicSelector').data('counter', '1');

现在我尝试使用以下代码

对此实例进行排序
var $checkboxes = $('.foo').filter('checked');
$checkboxes.sort(function (a, b) {
    var dataA = a.data('counter');
    var dataB = b.data('counter');

    return dataA < dataB;
});

我知道......这不行......

  • 如何在我的排序功能中不同时引入$(a)$(b)来修复我的代码?
  • 是否有任何库可以为我这样做(特定于jquery)?
  • 还有其他任何意见吗?

非常重要的说明:
我不想改变我的UI中的顺序(nope:没有UI-sort-thing ...像tinySort),并且我的UI中的排序与预期结果不对应 - 这就是我需要的原因在运行中排序,而不是在创建时通过标记......

1 个答案:

答案 0 :(得分:2)

您可以使用el.getAttribute("data-counter")代替$(a).data("counter")

var $checkboxes = $('.foo:checked');
$checkboxes.sort(function (a, b) {
    var dataA = a.getAttribute("data-counter");
    var dataB = b.getAttribute("data-counter");
    return dataA < dataB;
});

Example fiddle