我正在使用 jQuery 对表进行排序,大致遵循找到的代码here https://stackoverflow.com/questions/10543618/jquery-sort-a-table-after-adding-a-row-to-it。代码草图如下:
$('.sort-table').click(function(e) {
// cache objects
$table = $('#sort-table'), // cache the target table DOM element
$rows = $('tbody > tr', $table); // cache rows from target table body
// sort items
$rows.sort(<my_predicate_function(a,b){...}>);
// assign to table - what is going on?
$rows.each(function(index, row){
$table.append(row); // <-- how come $table remains the same size?
});
});
虽然代码工作正常,但我对将行附加回表的代码感到困惑,该代码只是迭代排序的行,将每个行附加到行的末尾$table
.
我们在任何阶段都没有清空$table
来自它以前的孩子。
- Since
$table
从来没有被清空过,怎么会$table
保持相同的大小?
- Does
append()
还强制目标容器中的唯一性?
这就是 DOM 的工作原理。一个元素不能出现在两个不同的地方。如果某个元素已存在于文档中并且您将其放置在其他位置,则它将从当前位置移动。我想,它有点像 Set,但它不是这样指定的。所以它没有删除复制对象,因为永远不会有重复的对象:它只是移动同一个对象,该对象只能存在于一个地方。
From 底层方法的 MDN 文档,Node.appendChild https://developer.mozilla.org/en/docs/Web/API/Node/appendChild:
The Node.appendChild()
方法将一个节点添加到指定父节点的子节点列表的末尾。如果给定的子节点是对文档中现有节点的引用,appendChild()
将其从当前位置移动到新位置(在将节点附加到其他节点之前不需要从其父节点中删除该节点)。
如果你想复制元素,你需要克隆它们(DOM https://developer.mozilla.org/en/docs/Web/API/Node/cloneNode, jQuery https://api.jquery.com/clone/).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)