我有这个 HTML 结构:
<p id="lorem">
<span class="part" id="n01">L</span><span class="part" id="n02">o</span><span class="part" id="n03">r</span><span class="part" id="n04">e</span><span class="part" id="n05">m</span> <span class="part" id="n06">i</span><span class="part" id="n07">p</span><span class="part" id="n08">s</span><span class="part" id="n09">u</span><span class="part" id="n10">m</span>
</p>
<h1>Click Me</h1>
这个JavaScript代码:
arrRed = ["#n01", "#n04", "#n05", "#n09"];
arrBlue = ["#n02", "#n07", "#n08"];
$("h1").click(function(){
$.each(arrRed, function( i, v ){
$(v).addClass("red");
});
$.each(arrBlue, function( i, v ){
$(v).addClass("blue");
});
})
单击时h1
,某些字母会变成某种颜色。问题在于性能,我触发了太多的回流/重绘。在另一个问题中,有人告诉我使用parent.cloneNode(true)
and parent.parentNode.replaceChild(clone, parent)
。所以我克隆了元素,改变了它们,但它们又回到了原位,只触发了一次回流。
所以我克隆了父元素:
var doc = document;
var lorem = doc.getElementById("lorem");
var clone = lorem.cloneNode(true)
但是我现在必须如何进行?我必须以某种方式修改元素clone
然后替换它们,但$.each
再次使用来编辑它们似乎不是一个好主意。