最近工作很忙,有段時間沒學習我的代碼了,昨天再打開看,發現很多之前很爛熟的東西居然也變得模糊。正好之前一直躍躍欲試想參加的“先行者計划”論壇竟然可以看到老師布置的練習題目了,於是還是決定跟着論壇一起做題吧,每天堅持前進一小步,希望自己能早日轉行前端。
昨天做了第一個題,題目如下:
這個題還算簡單,“克隆五次”我想到了for循環,cloneNode()方法之前在學習js基礎時還有印象,只是已經不太記得括號內應該放什么參數了,然后看到cloneNode()時想起了jQuery中同樣功能的clone(),同樣還是對參數不太清楚。然后就正好查了一下,順便加深一下記憶。
cloneNode()方法,是DOM中克隆節點的方法,接收boolean類型的參數,也不可以不設置參數,不設置參數時默認為false。參數設置為true時,表明克隆節點及其屬性以及后代;參數設置為false時,表明克隆節點本身。事件方法應該也算是一種屬性吧,所以在參數為true的情況下,綁定的事件應該也要被克隆。
關於jQuery中的clone(),也接收true和false參數,用法同上,只是它只適用於jQuery對象。
雖然看起來簡單,但是寫起代碼來還是耗了一番心力的,我做的答案如下, 雖然性能發面還有需要優化的地方。
<script>
window.onload=function(){
var div=document.getElementById("div_0");
var main=document.querySelector("#main");
for(var i=0; i<5; i++){
var clone=div.cloneNode(true);
main.appendChild(clone);
}
}
</script>
不過在論壇里,發現有一位同學寫得特別棒,使用了createDocumentFragment文檔碎片,大大提高了效率。代碼摘錄過來,以便學習。
<script>
var node="";
var fragment = document.createDocumentFragment();
for (var i = 1; i <= 5; i++) {
node=document.getElementById("div_0").cloneNode(true);
fragment.appendChild(node);
}
document.getElementById("main").appendChild(fragment);
</script>