我有一堆<div>
元素,其中每个元素都有一个name
。我想查询使用jQuery的<div>
元素,但我希望它们按照name
的字母顺序排列。常用代码查询一组元素,但以特定顺序
$("div").doStuff()
不以任何特殊顺序返回元素。
我有一堆<div>
元素,其中每个元素都有一个name
。我想查询使用jQuery的<div>
元素,但我希望它们按照name
的字母顺序排列。常用代码查询一组元素,但以特定顺序
$("div").doStuff()
不以任何特殊顺序返回元素。
$($("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(); });
其实不行。第二个'$()'调用会破坏之前完成的排序。 – Randomblue
@Randomblue嗯有趣的知道。我改变了它,使它现在保持为一个数组。 – Paulpro
@Randomblue它确实有效。我只是有一个错误,并直接比较a和b而不是它们的名称属性。它现在工作:) http:// jsfiddle。网/ Paulpro/PrfZy/ – Paulpro
除了将元素列表获取到一个普通的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/
Yuck!这很糟糕。 – Randomblue
是的,它很糟糕,但没有其他办法可以做到。你不能“查询”DOM元素。您只能选择它们并使用它们的内容和属性。我相信你可以找到一个jQuery插件来帮助你。 –
@ jfriend00其实不行。 '$(elArray)'中的'$()'破坏了之前完成的排序。 – Randomblue
下面的代码是未经测试,但我认为你可以沿着以下的线路做一些事情:
$($("div").get().sort(sortFn)).each(doStuff);
哪里sortFn
是Array.sort
的适当参数,它按名称属性对元素进行排序。
其实不行。第二个'$()'调用会破坏之前完成的排序。 – Randomblue
@Randomblue,我确信它确实有效; '.each'保留订购。此外,PaulPRO的jsfiddle正是如此,它的工作正确。 –
事实上,第二个'$()'查询无法破坏先前完成的排序,因为您只查询单个元素(一个数组)。你不能销毁只有一个元素。 –
实际上,它按照它们在文档中出现的顺序返回元素 – yitwail