簡體   English   中英

如何正確獲取父元素的子元素並將其附加為另一個元素的子元素

[英]How can I properly take the children of a parent element and append it as the children of another

我有一個小型測試應用程序,我試圖獲取父元素的子元素並將它們作為子元素附加到另一個元素。 我已經寫了一個代碼來做到這一點,但結果並不完美。

 function run() { var elems = document.getElementById('happy').children; for (i = 0; i < elems.length; i++) { document.getElementById('enabled').appendChild(elems[i]) } }
 body { padding: 30px 30px 30px 30px; }
 <h2>The Button Element</h2> <div id="happy"> <span>Hello!</span> <span>Sad!</span> <span>Click me!</span> <span>Try me!</span> </div> <div id="enabled"> <button type="button" onclick="run()">Click me!</button> </div>

當“點擊我!” 按鈕被點擊,來自“你好!”、“悲傷!”、“點擊我!”、“試試我!” 只有“你好!” 和“點擊我!” 移動。 為了讓其他人移動“點擊我!” 按鈕必須多次點擊。

我希望它們都在第一次點擊時移動,我該如何解決這個問題?

循環計數器將不起作用,因為elems數組在循環的每次迭代中變得越來越小。 這將始終只附加一半的子元素。

 function run() { var elems = document.getElementById('happy').children; while (elems.length > 0) { document.getElementById('enabled').appendChild(elems[0]) } }
 <!DOCTYPE html> <html> <body style="padding: 30px 30px 30px 30px;"> <h2>The Button Element</h2> <div id="happy"> <span>Hello</span> <span>Sad</span> <span>Click Me!</span> <span>try Me!</span> </div> <div id="enabled"> <button type="button" onclick="run()">Click Me!</button> </div> </body> </html>

如果您不想使用循環,您可以執行以下操作:

 function run() { var enabledDiv = document.getElementById('enabled'); var happyDiv = document.getElementById('happy'); enabledDiv.innerHTML += happyDiv.innerHTML; happyDiv.innerHTML = ""; }
 <!DOCTYPE html> <html> <body style="padding: 30px 30px 30px 30px;"> <h2>The Button Element</h2> <div id="happy"> <span>Hello</span> <span>Sad</span> <span>Click Me!</span> <span>try Me!</span> </div> <div id="enabled"> <button type="button" onclick="run()">Click Me!</button> </div> </body> </html>

您可以使用Range API 選擇第一個節點的內容,然后將其提取DocumentFragment 最后,您只需將此片段附加到您的目標元素:

 document.getElementById('btn').addEventListener('click', function() { const source = document.getElementById('happy'); const target = document.getElementById('enabled'); const range = document.createRange(); range.selectNodeContents(source); const content = range.extractContents(); target.append(content); }, {once: true});
 #happy { color: green; border: 1px solid } #enabled { color: red; border: 1px solid }
 <h2>The Button Element</h2> <div id="happy"> <span>Hello</span> <span>Sad</span> <span>Click Me!</span> <span>try Me!</span> </div> <div id="enabled"> <button type="button" id="btn">Click Me!</button> </div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM