我的页面上有以下DIV:
<div id="pi_div3">
Div 3
</div>
<div id="pi_div2">
Div 2
</div>
<div id="pi_div1">
Div 1
</div>
<div id="pi_div6">
Div 6
</div>
<div id="pi_div5">
Div 5
</div>
<div id="pi_div4">
Div 4
</div>
我正在尝试使用jQuery代码$("div[id*=pi_div]")
选择Div。
当我在选择器上执行each()时,我需要根据ID对div进行排序。当我循环遍历DIV时,顺序应为:PI_DIV1,PI_DIV2,PI_DIV3,PI_DIV4,PI_DIV5,PI_DIV6。我怎么能在jQuery中做到这一点?
答案 0 :(得分:17)
您可以在致电.sort()
之前致电.each()$("div[id*=pi_div]").sort(function(a,b){
if(a.id < b.id) {
return -1;
} else {
return 1;
}
}).each(function() { console.log($(this).attr("id"));});
编辑:我想知道为什么其他答案正在删除id的pi_div
部分而我得到了它。如果您根据“字符串”进行比较pi_div10
将在pi_div2
之前进行比较。
答案 1 :(得分:7)
如果您还想在页面上明显地对它们进行排序
$('div[id^="pi_div"]').sort(function (a, b) {
var re = /[^\d]/g;
return ~~a.id.replace(re, '') > ~~b.id.replace(re, '');
})
.appendTo("#container");
注意~~
将值转换为整数,否则它们将被比较为字符串。
答案 2 :(得分:6)
$("div[id^=pi_div]").sort(function (a, b) {
return a.id.replace('pi_div', '') > b.id.replace('pi_div', '');
}).foo();
答案 3 :(得分:1)
我会使用Array.sort方法。 http://jsfiddle.net/LJWrg/
var divArr = $("div[id*=pi_div]");
function cleanId(id) {
return parseInt(id.replace("pi_div",""),10);
}
Array.prototype.sort.call(divArr,function(a,b) {
return cleanId(a.id) > cleanId(b.id);
});
divArr.each(function(){
console.log(this.id);
});
jQuery确实在内部定义了此方法,因此您可以将其缩短为此(但它使用未记录的方法)http://jsfiddle.net/LJWrg/1/:
var divArr = $("div[id*=pi_div]");
function cleanId(id) {
return parseInt(id.replace("pi_div",""),10);
}
divArr.sort(function(a,b) {
return cleanId(a.id) > cleanId(b.id);
});
divArr.each(function(){
console.log(this.id);
});