2017-11-22 1 views
0

Ich versuche, HTML-formatierten Block an ein vorhandenes div mit append Kind anfügen. Aber ich sehe, dass der HTML-Code anstelle von formatiertem HTML angehängt ist. Irgendein Zeiger auf, wie man HTML-Entwurf anstelle von HTML-Code mit appendChild und createTextNode hinzufügt?CreateTextNode in Javascript hängt HTML-Inhalt an

Fiddle

<div id="currentElement"> 
    <div> 
    <h2> 
    Hello test 
    </h2> 
    </div> 
</div> 

Script

var ele = document.getElementById("currentElement"); 
var newHtml = "<div><h3>hello test continued</h3></div>"; 
ele.appendChild(document.createTextNode(newHtml)); 
+4

ja, weil ein Textknoten ist Text, nicht HTML. 'ele.innerHTML + = newHTML' oder, eine bessere Alternative' ele.insertAdjacentHTML ('beforeend', newHtml) 'ist was Sie wollen https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML –

Antwort

1

Warum nicht einfach verwenden Element.innerHTML? Sie können ele.innerHTML = newHtml verwenden, um den Inhalt zu überschreiben, oder ele.innerHTML += newHtml, um den vorhandenen Inhalt hinzuzufügen.

var ele = document.getElementById("currentElement"); 
 
var newHtml = "<div><h3>hello test continued</h3></div>"; 
 
ele.innerHTML += newHtml;
<div id="currentElement"> 
 
    <div> 
 
    <h2> 
 
     Hello test 
 
    </h2> 
 
    </div> 
 
</div>

Beachten Sie, dass diese alle vorhandenen Ereignishandler entfernen. Um Handler zu halten, sollten Sie Element.insertAdjacentHTML() statt:

var ele = document.getElementById("currentElement"); 
 
var newHtml = "<div><h3>hello test continued</h3></div>"; 
 
ele.insertAdjacentHTML('beforeend', newHtml);
<div id="currentElement"> 
 
    <div> 
 
    <h2> 
 
     Hello test 
 
    </h2> 
 
    </div> 
 
</div>

Beachten Sie, dass .insertAdjacentHTML() die Fähigkeit wo die eingefügten Text sollte mit einer der folgenden Optionen als die gehen zu wählen, bietet (obligatorisch) erster Funktionsparameter:

  • beforebegin: Bef Erz das Element selbst.
  • afterbegin: Nur innerhalb des Elements, vor seinem ersten Kind.
  • beforeend: Nur innerhalb des Elements, nach seinem letzten Kind.
  • afterend: Nach dem Element selbst.

Ich bin mit beforeend im obigen Beispiel gegangen.

Hoffe, das hilft! :)

+1

das würde den aktuellen html ersetzen: p (comment pre edit) (Und wenn Sie es HINZUFÜGEN möchten, ist 'insertAdjacentHTML' leistungsfähiger: p) –

+0

@JaromandaX - Aktualisiert, um sowohl Ersetzung als auch Addition abzudecken :) –

+1

Dies wird bestehende Ereignis-Listener entfernen. irgendeine Option mit appendChild? – Kurkula

0

Wenn Sie Ereignis-Listener erhalten möchten, haben Sie zwei Möglichkeiten

// sample event listener 
 
document.querySelector('#currentElement h2').addEventListener('click',() => console.log('click works')); 
 
// code starts here 
 
var ele = document.getElementById("currentElement"); 
 
var div = document.createElement('div'), 
 
    h3 = document.createElement('h3'), 
 
    txt = document.createTextNode('hello test continued'); 
 
div.appendChild(h3); 
 
h3.appendChild(txt); 
 
ele.appendChild(div);
<div id="currentElement"> 
 
    <div> 
 
    <h2> 
 
    Hello test 
 
    </h2> 
 
    </div> 
 
</div>

oder

// sample event listener 
 
document.querySelector('#currentElement h2').addEventListener('click',() => console.log('click works')); 
 
// code starts here 
 
var ele = document.getElementById("currentElement"); 
 
var newHtml = "<div><h3>hello test continued</h3></div>"; 
 
ele.insertAdjacentHTML('beforeend', newHtml);
<div id="currentElement"> 
 
    <div> 
 
    <h2> 
 
    Hello test 
 
    </h2> 
 
    </div> 
 
</div>

1

Wenn Sie will es durch appendChild, tut es auf diese Weise:

var newHtml = "<div><h3>hello test continued</h3></div>"; 
var child = document.createElement('div'); 
child.innerHTML = newHtml; 
child = child.firstChild; 
document.getElementById('currentElement').appendChild(child); 

https://jsfiddle.net/vdv6yqcL/10/