我有一堆<div>
个元素,每个元素都有一个name
。我想使用jQuery查询<div>
元素,但我希望它们按照name
的字母顺序排列。通常的代码
$("div").doStuff()
不会以任何特殊顺序返回元素。
答案 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);
答案 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);
其中sortFn
是Array.sort
的正确参数,它按名称属性对元素进行排序。