查询一组元素,但按特定顺序查询

时间:2011-07-29 00:44:02

标签: jquery

我有一堆<div>个元素,每个元素都有一个name。我想使用jQuery查询<div>元素,但我希望它们按照name的字母顺序排列。通常的代码

$("div").doStuff()

不会以任何特殊顺序返回元素。

3 个答案:

答案 0 :(得分:3)

除了将元素列表放入普通的JS数组,按名称对数组进行排序,将它们放回到jQuery对象中,然后按照排序顺序调用它们的最终操作时,我没有看到任何方法。

function compareNameAlpha(a, b) {
   var n1 = a.getAttribute("name");
   var n2 = b.getAttribute("name");

   if (n1 < n2) return(-1);
   if (n1 == n2) return(0);
   return(1);
}

var elArray = $("div").toArray().sort(compareNameAlpha);
$(elArray).doStuff();

或在一行中完成:

$($("div").toArray().sort(compareNameAlpha)).doStuff();

此处的演示演示:http://jsfiddle.net/jfriend00/qeLfX/


编辑:由于jQuery直接支持.sort(),因此似乎有一种更简单的方法(尽管它在jQuery源中标记为仅供内部使用)。你可以这样做:

$("div").sort(compareNameAlpha).each(doStuff);

在此处查看该版本http://jsfiddle.net/jfriend00/hJhhf/

答案 1 :(得分:3)

$($("div").get().sort(function(a,b){
    if($(a).attr("name") === $(b).attr("name"))
        return 0;
    return $(a).attr("name") < $(b).attr("name") ? -1 : 1;
})).each(function(){ $(this).doStuff(); });

答案 2 :(得分:1)

以下代码未经测试,但我认为您可以按照以下方式执行以下操作:

$($("div").get().sort(sortFn)).each(doStuff);

其中sortFnArray.sort的正确参数,它按名称属性对元素进行排序。