对节点进行排序并不是那么简单,您可能需要处理可能会妨碍您的其他节点。无论如何,这是一个接受 NodeList 或 HTMLCollection 的函数,将其转换为数组,对其进行排序,然后将节点按顺序放回原处。请注意,元素被放回父元素的底部,因此任何其他元素最终都将位于顶部。无论如何,它展示了一种您可以适应的方法。
还有许多其他方法,包括其他使用 DOM 方法的方法,请注意任何基于修改标记的方法。此外,请注意克隆元素,因为这可能会对侦听器产生不受欢迎的副作用(它们可能会被删除,也可能不会被删除,具体取决于浏览器和添加方式)。
<script type="text/javascript">
function getText(el) {
return el.textContent || el.innerText || '';
}
function sortElements(nodeList) {
// Assume there's a common parent
var node, parentNode = nodeList[0].parentNode
// Define a sort function
function sortEls(a, b) {
var aText = getText(a);
var bText = getText(b);
return aText == bText? 0 : aText < bText? -1 : 1;
}
// Convert nodelist to an array and remove from the DOM at the same time
var a = [], i = nodeList.length;
while (i--) {
a[i] = parentNode.removeChild(nodeList[i]);
}
// Sort the array
a.sort(sortEls);
// Put elements back in order
i = 0;
while (node = a[i++]) {
parentNode.appendChild(node);
}
}
</script>
<div>0</div>
<div>4</div>
<div>2</div>
<div>3</div>
<div>5</div>
<button onclick="sortElements(document.getElementsByTagName('div'))">Sort</button>