根据这个 MDN 文档,属性集合是一个映射,而不是一个数组,因此它没有定义的顺序。如果你想让它排序,你首先必须把它放在数组中,排序,然后.each()
在排序后的数组上做。
或者,您可以将您的结果收集.each()
到一个数组中,对这些结果进行排序,然后在最后以所需的顺序附加排序后的结果。查看您的代码,我认为工作量较少,因此您可以这样做:
var el = $('#myElement');
var attributes = el[0].attributes;
var output = [];
$.each(attributes,function(i,attr){
var name = attr.nodeName;
var val = attr.nodeValue;
var regex = /^extra\d$/;
if(name.match(regex)) {
output.push("<div id="+val+" /div>");
}
});
$(parentDiv).append(output.sort().join(""));
如果您的属性可以按字典顺序排序并且您不超出extra9
. 如果它超出了单个数字,那么您必须将数字转换为数字并使用自定义排序函数生成正确的排序顺序,如下所示:
var el = $('#myElement');
var attributes = el[0].attributes;
var output = [];
var regex = /^extra(\d+)$/;
$.each(attributes,function(i,attr){
var name = attr.nodeName;
var val = attr.nodeValue;
var matches, item;
if(matches = name.match(regex)) {
item = {};
item.html = "<div id="+val+" /div>";
item.num = parseInt(matches[1], 10);
output.push(item);
}
});
// sort array of objects with a custom sort function
output.sort(function(a, b) {
return(a.num - b.num);
});
// append data in correct order now that the items are sorted
for (var i = 0; i < output.length; i++) {
$(parentDiv).append(output[i].html);
}