Mi capita spesso di utilizzare il seguente codice per cancellare il contenuto di un elemento:C'è un bug in Internet Explorer 9/10 con innerHTML = ""?
div.innerHTML = "";
ma ho trovato un comportamento Stange su Internet Explorer. Sembra che tutti i bambini del gruppo vengano rimossi anche i loro figli! Se tengo un riferimento a un figlio della divisione sopra, dopo aver eseguito div.innerHTML = "";
, il nodo di testo del figlio non è più nel figlio.
Il codice seguente è la prova di questo comportamento (http://jsfiddle.net/Laudp273/):
function createText() {
var e = document.createElement("div");
e.textContent = "Hello World!";
return e;
}
var mrk = document.createElement("div");
mrk.appendChild(createText());
mrk.style.border = "4px solid yellow";
var container = null;
function addDiv() {
if (container) {
container.innerHTML = "";
}
var e = document.createElement("div");
e.appendChild(mrk);
container = e;
document.body.appendChild(e);
}
var btn = document.createElement("button");
btn.textContent = "Add marker";
btn.addEventListener(
"click",
function() {
addDiv();
},
false
);
document.body.appendChild(btn);
Se si fa clic sul pulsante "Add Marker" due volte, si vedrà un rettangolo giallo vuoto, invece di uno con il texte " Ciao wordl! ".
Si tratta di un bug o di una specifica non utilizzata da Firefox o Google Chrome?
sono d'accordo. L'interpretazione di Microsoft è più che vaga. Ecco perché non uso più 'div.innerHTML =" "' Io uso 'removeChild' su ogni childnode, ma non sono sicuro che sia più veloce. – Tolokoban
@Tolokoban: Lo è, in realtà, in modo drammatico. Ho una risposta da qualche parte in giro con test delle prestazioni, e (con mia grande sorpresa al momento) 'removeChild' era più veloce di impostare' innerHTML' su '" "'. * Modifica *: trovato: http://stackoverflow.com/a/13798847/157247 –
La risposta collegata è già stata aggiornata. Ma per chiarire anche qui, usare 'innerHTML' è più veloce. –