对于适用于任意数量的任意数量的子 div 且数字在任何范围内的解决方案,您可以使用这样的函数(它实际上解析我们的 ID 的数量并对其进行真正的数字排序):
function sortChildrenDivsById(parentId) {
var parent = document.getElementById(parentId);
// get child divs
var children = parent.getElementsByTagName("div");
var ids = [], obj, i, len;
// build an array of objects that has both the element
// and a parsed div number in it so we can sort
for (i = 0, len = children.length; i < len; i++) {
obj = {};
obj.element = children[i];
obj.idNum = parseInt(children[i].id.replace(/[^\d]/g, ""), 10);
ids.push(obj);
}
// sort the array
ids.sort(function(a, b) {return(a.idNum - b.idNum);});
// append in sorted order
for (i = 0; i < ids.length; i++) {
parent.appendChild(ids[i].element);
}
}
这里的工作示例:http://jsfiddle.net/jfriend00/v9mCM/
仅供参考,这是跨浏览器的纯 JavaScript,甚至可以在没有 shims 的旧浏览器中使用。
这是另一种使用稍微少一点的代码的方法:
function sortChildrenDivsById(parentId) {
var parent = document.getElementById(parentId);
var children = parent.getElementsByTagName("div");
var ids = [], i, len;
for (i = 0, len = children.length; i < len; i++) {
ids.push(parseInt(children[i].id.replace(/^.*_/g, ""), 10));
}
ids.sort(function(a, b) {return(a - b);});
for (i = 0, len = ids.length; i < len; i++) {
parent.appendChild(document.getElementById("dv_" + ids[i]));
}
}
工作示例:http://jsfiddle.net/jfriend00/TqJVb/
所有的ids nums被解析出来并放入一个排序的数组中,然后通过id查找每个对象并按排序顺序重新插入。这不会像第一个那么快,但它的代码更少。