我有这个HTML代码:
<div id="main">
<div id="dv_7">...</div>
<div id="dv_1">...</div>
<div id="dv_8">...</div>
<div id="dv_4">...</div>
<div id="dv_11">...</div>
<div id="dv_2">...</div>
</div>
如何使用javascript在maindiv中订购div?我不知道:(
提前感谢,
答案 0 :(得分:6)
希望这会有所帮助。更新了帐号,以便按字母顺序排列1和11。
<div id="main">
<div id="dv_07">7...</div>
<div id="dv_01">1...</div>
<div id="dv_08">8...</div>
<div id="dv_04">4...</div>
<div id="dv_11">11...</div>
<div id="dv_02">2...</div>
</div>
jQuery选项:
var mylist = $('#main');
var listitems = mylist.children('div').get();
listitems.sort(function(a, b) {
var compA = $(a).attr('id').toUpperCase();
var compB = $(b).attr('id').toUpperCase();
return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
})
$.each(listitems, function(idx, itm) {
mylist.append(itm);
});
Javascript选项:
var mylist = document.getElementById('main');
var divs = mylist.getElementsByTagName('div');
var listitems = [];
for (i = 0; i < divs.length; i++) {
listitems.push(divs.item(i));
}
listitems.sort(function(a, b) {
var compA = a.getAttribute('id').toUpperCase();
var compB = b.getAttribute('id').toUpperCase();
return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
});
for (i = 0; i < listitems.length; i++) {
mylist.appendChild(listitems[i]);
}
答案 1 :(得分:5)
怎么样:
var main = document.getElementById( 'main' );
[].map.call( main.children, Object ).sort( function ( a, b ) {
return +a.id.match( /\d+/ ) - +b.id.match( /\d+/ );
}).forEach( function ( elem ) {
main.appendChild( elem );
});
现场演示: http://jsfiddle.net/ZEKrH/6/
(您需要为IE8填充这些数组方法。)
答案 2 :(得分:2)
以下内容可能有效:
var main = document.getElementById("main");
for(var i = 11; i > -1; i--) {
var div = document.getElementById("dv_" + i);
if(div != null)
main.appendChild(div);
}
答案 3 :(得分:2)
对于适用于任意范围内任意数量的子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,甚至可以在没有垫片的旧浏览器中使用。
这是使用稍微少量代码执行此操作的另一种方法:
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/
解析出所有id nums并将其放入一个已排序的数组中,然后按id查找每个对象并按排序顺序重新插入。这不会像第一个那么快,但它的代码更少。
答案 4 :(得分:1)
以下与浏览器兼容回到IE 5和类似,没有填充程序或库。 sort函数可以修改为按数字排序,目前它将div分类为1,11,2,4等。改变它并不太难,所以它们分为1,2,4,... 11。
function sortDivs(div) {
var divs = div.getElementsByTagName('div');
var a = [];
for (var i=0, iLen=divs.length; i<iLen; i++) {
a[i] = divs[i];
}
a.sort(function(a, b) {
return a.id < b.id? -1 : a.id == b.id? 0 : 1;
});
while (iLen--) {
div.insertBefore(a[iLen], div.firstChild);
}
}
window.onload = function() {
sortDivs(document.getElementById('main'));
}
极简主义版本,适用于那些认为重要的评论和数字排序的人。
function sortDivs(div) {
var divs = div.getElementsByTagName('div');
// Convert divs collection to an array
for (var i=0, iLen=divs.length, a=[]; i<iLen; i++) a[i] = divs[i];
// Sort the array numerically
a.sort(function(a, b) {
return a.id.split('_')[1] - b.id.split('_')[1];
});
// Move elements to sorted order
while (iLen--) div.insertBefore(a[iLen], div.firstChild);
}