Der erste Ansatz funktioniert nicht, da er nur die Variable auf den neuen Wert setzt, er schreibt den Wert nicht in das Element. Die Linie
var innerText = d.innerText || d.textContent;
... setzt die Variable innerText
auf den Wert der Eigenschaft text es findet, es ist kein Hinweis auf die tatsächliche Eigenschaft selbst.
Sie werden den Zweig zu tun haben, zum Beispiel:
var d = document.getElementById('d');
var msg = "new text";
if ("innerText" in d) {
d.innerText = msg;
}
else {
d.textContent = msg;
}
Das Feature-detektiert, ob der Browser verwendet innerText
oder textContent
, indem Sie auf das Element für die Existenz der Immobilie suchen (das ist, was die in
Betreiber überprüft, ob ein Objekt eine Eigenschaft mit dem angegebenen Namen hat, selbst wenn diese Eigenschaft leer ist, null
, undefined
, usw.).
können Sie sogar selbst schreiben eine Funktion für sie:
var setText = (function() {
function setTextInnerText(element, msg) {
element.innerText = msg;
}
function setTextTextContent(element, msg) {
element.textContent = msg;
}
return "innerText" in document.createElement('span') ? setTextInnerText : setTextTextContent;
})();
Das macht die Feature-Erkennung einmal und gibt eine Funktion jeden halbwegs anständigen Motor für Dich Inline wird.
Oder alternativ, wenn HTML-Markup in der Nachricht als Markup (anstatt als literaler Text) behandelt werden soll, können Sie einfach innerHTML
verwenden (was in allen Browsern konsistent ist). Aber wieder, wenn Sie innerHTML
verwenden, wird Markup verarbeitet, was möglicherweise nicht das ist, was Sie wollen.
Ich finde es sinnvoll, eine gute JavaScript-Bibliothek zu verwenden, um mit diesem Browser Unterschieden zu behandeln (und eine Tonne nützlicher weiterer Funktionalität zur Verfügung zu stellen), wie jQuery, YUI, Closure oder any of several others. Offensichtlich gibt es nichts, was man mit einer Bibliothek tun kann, auf die man nicht verzichten kann, es geht nur darum, auf den Schultern von Leuten zu stehen, die schon eine Menge Arbeit geleistet haben. :-)
In diesem Fall zum Beispiel mit jQuery die oben wäre:
$("#d").text("new text");
Das ist es.
Warum setzen Sie die zweite Lösung nicht in eine Funktion mit einem Parameter für das Element und einem für die Zeichenfolge. Dann müssten Sie 'setText (mydiv," new text ") machen;' –
es ist nicht "document.getElementByid" sollte "document.getElementById" sein. "I" von "id" sollte in Großbuchstaben geschrieben sein. –
'd [('innerText' in d)? 'innerText': 'textContent'] = 'Neuer Text'; ' –