2016-04-07 28 views
-3

我有以下的JS代碼,我試圖將這些元素附加到DOM。我已經這樣做了,但是我試圖找出如何使用循環來追加這些以遵循DRY原則。我只能使用香草JS。使用循環來簡化DOM操作Vanilla JS

var divOne = document.getElementById('buttonHolder'); 
 

 
var btnGroupOne = document.createElement('div') 
 
btnGroupOne.className = 'btn-group'; 
 
divOne.appendChild(btnGroupOne); 
 

 
var btnOne = document.createElement('button'); 
 
var textOne = document.createTextNode('1'); 
 
btnOne.appendChild(textOne); 
 
btnOne.className = 'btn btn-default'; 
 
btnGroupOne.appendChild(btnOne); 
 

 
var btnTwo = document.createElement('button'); 
 
var textTwo = document.createTextNode('2'); 
 
btnTwo.appendChild(textTwo); 
 
btnTwo.className = 'btn btn-default'; 
 
btnGroupOne.appendChild(btnTwo); 
 

 
var btnThree = document.createElement('button'); 
 
var textThree = document.createTextNode('3'); 
 
btnThree.appendChild(textThree); 
 
btnThree.className = 'btn btn-default'; 
 
btnGroupOne.appendChild(btnThree); 
 

 
var btnFour = document.createElement('button'); 
 
var textFour = document.createTextNode('4'); 
 
btnFour.appendChild(textFour); 
 
btnFour.className = 'btn btn-default'; 
 
btnGroupOne.appendChild(btnFour);
<div id="buttonHolder"></div>

+2

你展示了你試圖編碼以避免重複的代碼並解釋什麼不起作用? –

+0

'for-loop'如何? – Rayon

+0

你並不需要循環。使用接受文本節點值的代碼創建一個名爲'createDefaultBtn'的函數,並返回一個新的默認按鈕元素,您可以將其添加到父元素中。 – Andy

回答

1

,你可以嘗試抽象掉儘可能多的代碼,安迪是正確的功能是最適合這種任務:

function buttonMaker(textnode) { 
 
    var btnOne = document.createElement('button'); 
 
    var textOne = document.createTextNode(textnode); 
 
    btnOne.appendChild(textOne); 
 
    btnOne.className = 'btn btn-default'; 
 
    return btnOne; 
 
} 
 

 
var numberOfButtons = 4; 
 

 
var btnHolder = document.createElement('div'); 
 

 
// in a loop you can then do this: 
 
for (var i = 1; i <= numberOfButtons; i++) { 
 
    btnHolder.appendChild(buttonMaker(i)); 
 
} 
 

 
document.getElementById('btnBox').appendChild(btnHolder);
<div id="btnBox"></div>

莫非
+1

我建議使用一個docfrag,否則每當你添加一個新按鈕時你就會碰到DOM。 – Andy

+0

請原諒我的編輯。我不喜歡OP要求他做功課,但如果稍後有人遇到這個問題,我希望代碼爲他們開箱即用。 –

+0

無後顧之憂,欣賞 – JordanHendrix