Ich verwende oft den folgenden Code den Inhalt eines Elements zu löschen:Gibt es einen Fehler in Internet Explorer 9/10 mit innerHTML = ""?
div.innerHTML = "";
Aber ich seltsam Verhalten im Internet Explorer gefunden. Es scheint, dass alle Kinder des div ihre eigenen Kinder auch entfernt bekommen! Wenn ich einen Verweis auf ein Kind des obigen Bereichs beibehalten habe, nachdem div.innerHTML = "";
ausgeführt wurde, befindet sich der Textknoten des untergeordneten Elements nicht mehr im untergeordneten Element.
Der folgende Code ist der Beweis für dieses Verhalten (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);
Wenn Sie auf die Schaltfläche „Marker hinzufügen“ Taste zweimal, werden Sie ein leeres gelbes Rechteck anstelle eines mit dem texte siehe " Hallo wordl! ".
Ist dies ein Fehler oder eine Spezifikation, die nicht von Firefox oder Google Chrome verwendet wird?
Ich bin damit einverstanden. Die Interpretation von Microsoft ist mehr als vage. Deshalb benutze ich 'div.innerHTML =" "nicht mehr. Ich benutze 'removeChild' auf jedem childnode, aber ich bin mir nicht sicher, dass das schneller ist. – Tolokoban
@Tolokoban: Es ist, tatsächlich - dramatisch. Ich habe eine Antwort irgendwo mit Leistungstests, und (zu meiner damaligen Überraschung) war 'removeChild' schneller als 'innerHTML' auf' "" zu setzen. * Bearbeiten *: Gefunden: http://stackoverflow.com/a/13798847/157247 –
Die verknüpfte Antwort wurde bereits aktualisiert. Aber auch hier ist die Verwendung von 'innerHTML' schneller. –