2017-06-01 103 views
0

我試圖使用appendChild()方法將document.createElement("div")元素添加到具有相同類名的多個<div>元素。嘗試將子類添加到具有相同類名的所有元素

我已經試過這樣:

const childElement = document.createElement("div"); 
childElement.className = "second"; 
const parentObject = document.getElementsByClassName("first"); 

[...parentObject].map(parent => parent.appendChild(childElement)) 

其中沒有工作,所以我嘗試:

for(let i = 0; i < parentObject.length; i++){ 
    parentObject[i].appendChild(childElement); 
} 

它的工作的唯一辦法是,如果我寫的html元素自己,然後將其添加到每個父代的innerHTML:

[...parentObject].map(parent => parent.innerHTML = "<div class='second'></div>") 

但是由於我生成所有不同類型的HTML元素標記,如IMG, DIV, SPAN我需要調用createElement()方法的方便。

有沒有人有這方面的經驗?

+0

要追加* *多種元素。爲要添加到的每個父級創建一個。 – Bergi

回答

2

一個元素只能存在於DOM中的一個地方。你需要做的是創建一個新的元素添加到每個父:

const parentObject = document.getElementsByClassName('first'); 
 

 
[...parentObject].forEach((parent, i) => { 
 
    const childElement = document.createElement('div'); 
 
    childElement.className = 'second'; 
 
    childElement.innerHTML = `second ${i}`; 
 
    parent.appendChild(childElement) 
 
});
div { padding: 5px; } 
 
.first { background-color: pink; display: inline-block; } 
 
.second { background-color: lightblue; }
<div class="first">first</div> 
 
<div class="first">first</div> 
 
<div class="first">first</div> 
 
<div class="first">first</div>

+0

救命恩,謝謝。就像我需要它一樣工作。 – Jousi

+0

而不是做奇怪的'[... parentObject] .map',只需使用'for(父對象的常量父){'循環 – Bergi

+0

@bergi爲什麼奇怪?那就是擴散算子。 –

相關問題