我发誓这几天前工作得很好......
elm = document.querySelectorAll(selector);
var frag = document.createDocumentFragment();
while (elm[0]){
frag.appendChild(elm[0]);
}
对,所以,这应该从我们的elm
节点列表中附加每个节点。当第一个被附加时,第二个“移动”到节点列表中的第一个位置,因此下一个总是elm[0]
. 当nodeList 完全附加时它应该停止。elm
但是,这给了我一个无限循环。想法?
编辑- 因为我多次得到相同的答案...... AnodeList
不是一个数组,它是一个实时参考。当一个节点被“移动”(此处为附加)时,它应该自动从节点列表中删除。答案都说“你一遍又一遍地附加相同的元素” - 这就是正在发生的事情,它不应该是。for 循环不应该工作,因为当第一个节点被附加时,下一个节点将获取它的索引。
第二次编辑
所以现在的问题是“为什么nodeList
表现得像一个数组?”。每次将节点附加到某个地方时,节点列表都应该更新。最奇特的。
解决方案(以防有人需要处理实时+非实时节点列表)
elm = (/*however you're getting a node list*/);
var frag = document.createDocumentFragment();
var elength = elm.length;
for (var b = 0; b<elength; b++){
if (elm.length === elength){
frag.appendChild(elm[b]);
} else {
frag.appendChild(elm[0].cloneNode());
}
}
基本上,只是检查节点列表是否改变了长度。