我有一些简单的HTML,如下所示:
<body>
<form action="#">
<button type="button" onclick="changeDOM();">Change DOM</button>
</form>
<table>
<tr id='a'><td>a</td></tr>
<tr id='b'><td>b</td></tr>
<tr id='c'><td>c</td></tr>
</table>
</body>
我希望changeDOM
函数将表格的顶行推到底行,然后“冒泡”其余行。我尝试这样做:
function changeDOM() {
var nextRow = currentRow.nextSibling;
currentRow.className='';
nextRow.nextSibling = currentRow;
currentRow = nextRow;
currentRow.className='highlight';
return true;
}
var currentRow;
currentRow = document.getElementById('a');
currentRow.className='highlight';
不幸的是,当我通过调试器时,我注意到nextSibling
未按预期设置。我在网上看过一些类似的代码,但实际上他们删除了节点并附加了它们。两个问题:
有没有办法在不创建和销毁DOM元素的情况下更改DOM元素的位置?
如果(1)的答案为是,那么我该怎么做?
答案 0 :(得分:0)
如果你愿意使用jQuery,那么有一个简单的功能。您可以查看以下示例:
答案 1 :(得分:0)
.removeChild
和.appendChild
方法实际上并不删除或创建任何内容,它们只是建立并删除节点与其父节点的关联。使用这些方法,您可以完全按照自己的意愿行事 - 移动元素而无需任何开销。
正如.removeChild
上的MDN文档所说:
var oldChild = element.removeChild(child)
已删除的子节点 仍然存在于内存中,但不再是DOM的一部分。你可以 稍后在代码中通过oldChild对象重用已删除的节点 参考
实际上,由于元素只能有一个父元素,因此使用.appendChild
和所有其他类似方法会自动将其从以前的位置删除,因此您可以根据需要移动元素而不使用.removeChild
。