2016-04-16 8 views
2

新しく作成された要素(createElement())への参照を、DOMの既存の要素の後に挿入したままにするにはどうすればいいですか(insertAdjacentHTML())?私はinsertAdjacentHTML()elNew/elNewInnerを使用する場合は、この例では`insertAdjacentHTML`と` createElement`

、あなたは、色が変化しないことがわかります。

var elOrig = document.getElementById('insertAfter'); 
 

 
// Create new element 
 
var elNew = document.createElement('div'), 
 
    elNewInner = document.createElement('div'); 
 

 
elNewInner.textContent = 'I\'m a new element, but I\'m not red'; 
 

 
elNew.appendChild(elNewInner); 
 

 
elOrig.insertAdjacentHTML('afterend', elNew.outerHTML); 
 

 
// This doesn't change the color in the DOM 
 
elNewInner.style.color = 'red';
<div id="insertAfter">Insert new element after me</div>

をへの参照を保持する方法はあります私がinsertAdjacentHTMLを使用した後の要素か、JavaScriptを使って同じことを達成するための他の方法がありますか?そのよう.outerHTML.insertAdjacentHTMLを使用するよりも

答えて

2

より良いアプローチはelOrig.parentNodeから.insertBeforeを使用することです。

var elOrig = document.getElementById('insertAfter'); 
 

 
// Create new element 
 
var elNew = document.createElement('div'), 
 
    elNewInner = document.createElement('div'); 
 

 
elNewInner.textContent = 'I\'m a new element, but I\'m not red'; 
 

 
elNew.appendChild(elNewInner); 
 
elOrig.parentNode.insertBefore(elNew, elOrig.nextSibling) 
 

 
// This doesn't change the color in the DOM 
 
elNewInner.style.color = 'red';
<div id="insertAfter">Insert new element after me</div>

これは事実insertAdjacentHTMLを使用してそれを"afterend"を置くと同じである、elOrig.nextSiblingelNewを挿入します。

オリジナルのやり方では、新しい要素をHTMLに変換してからHTMLから新しい要素を作成していましたが、確かに遅くなり、最終的にはコピーが追加されます。

+2

これは、質問の半分に答えています_他にも同じ方法でJavaScriptを実現していますか?なぜそれが動作しないのか興味があります。 – Tushar

+0

@Tushar:最後の文章を読んでください。元の方法ではうまくいかなかった理由を示しています。 –

+0

ありがとう、それは期待どおりに動作します。 – Daniel

関連する問題