Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 按特定顺序查询一组元素_Jquery - Fatal编程技术网

Jquery 按特定顺序查询一组元素

Jquery 按特定顺序查询一组元素,jquery,Jquery,我有一堆元素,每个元素都有一个名称。我想使用jQuery查询元素,但我希望它们按照名称的字母顺序来。通常的代码 $("div").doStuff() 不以任何特殊顺序返回元素。除了将元素列表放入普通JS数组中,按名称对该数组进行排序,然后将它们放回jQuery对象中,然后按排序顺序调用对它们的最终操作之外,我看不到任何其他方法 function compareNameAlpha(a, b) { var n1 = a.getAttribute("name"); var n2 = b.

我有一堆
元素,每个元素都有一个
名称
。我想使用jQuery查询
元素,但我希望它们按照
名称的字母顺序来。通常的代码

$("div").doStuff()

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

除了将元素列表放入普通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();
在此进行工作演示:


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

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

请看这里的版本,下面的代码未经测试,但我认为您可以按照下面的思路做一些事情:

$($("div").get().sort(sortFn)).each(doStuff);
其中,
sortFn
是按名称属性对元素进行排序的
Array.sort
的正确参数。

$($(“div”).get().sort(函数(a,b){
$($("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(); });
如果($(a).attr(“名称”)===$(b).attr(“名称”)) 返回0; 返回$(a).attr(“name”)<$(b).attr(“name”)?-1:1; })).each(函数(){$(this).doStuff();});
是的,这很糟糕,但没有其他办法。您不能“查询”DOM元素。您只能选择它们并使用它们的内容和属性。我相信你也能找到一个jQuery插件来帮你解决这个问题。@jfriend00实际上不起作用。
$(elArray)
中的
$()
会破坏以前完成的排序。@Randomblue-实际上,问题似乎是排序函数不起作用,因此排序顺序永远都不正确。我已经修好了,现在似乎可以用了。你可以看到它在这里工作:。非常感谢。你帮了大忙!我在jQuery源代码中做了一点探索,它实际上直接在ID的内部数组上支持sort()方法,所以我也添加了该版本。实际上,它按照元素在文档中出现的顺序返回元素,实际上不起作用。第二个
$()
调用将破坏以前完成的排序。@我很想知道。我对它进行了更改,使它现在保持为一个数组,但实际上它起了作用。我刚刚出错,直接比较了a和b,而不是它们的名称属性。它现在起作用了:)实际上,不起作用。第二个
$()
调用破坏了之前完成的排序。@Randomblue,我相当肯定它确实有效<代码>。每个
保留顺序。另外,PaulPRO的jsfiddle正好做到了这一点,并且工作正常。事实上,第二个
$()
查询无法破坏之前完成的排序,因为您只查询单个元素(一个数组)。你不能只破坏一个元素。谢谢你的澄清。
$($("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(); });