2013-10-25 9 views
11

Supponiamo di avere il seguente elemento <p id="abc">Hello World</p>. Se voglio modificare il contenuto nel tag <p> ho due modi nel codice javascript:
TextNode o innerHTML

document.getElementById("abc").innerHTML="good morning"; 
document.getElementById("abc").firstChild.nodeValue="good morning"; 

Le domande sono:

  • che sono la differenza tra le 2 soluzioni?
  • Quale dovrei usare? C'è uno migliore dell'altro?
+1

Lettura consigliata: 1) http://stackoverflow.com/a/1359822/1273830 2) http://kellegous.com/j/ 2013/02/27/InnerText-vs-TextContent / – Prasanth

risposta

21

Il primo cancellerà qualsiasi elemento HTML che potrebbe essere all'interno dell'elemento di destinazione. Il secondo funzionerà solo se il primo figlio è un nodo di testo (un errore comune è provare ad usarlo su un elemento vuoto).

Il secondo è "più corretto" (innerHTML è davvero una scorciatoia haxy) ma il primo è sicuramente più affidabile. Detto questo, è vulnerabile alle iniezioni di XSS.

Per essere completamente corretta, si dovrebbe fare questo:

var abc = document.getElementById('abc'); 
while(abc.firstChild) abc.removeChild(abc.firstChild); 
abc.appendChild(document.createTextNode("good morning"));