Il primo approccio non funziona perché non fa altro che impostare la variabile per il nuovo valore, esso non scrive il valore all'elemento. La linea
... imposta la variabile innerText
al valoredella proprietà testo che trova, ma non è un riferimento alla proprietà vero e proprio.
Dovrete fare il ramo, ad esempio:
var d = document.getElementById('d');
var msg = "new text";
if ("innerText" in d) {
d.innerText = msg;
}
else {
d.textContent = msg;
}
Tale caratteristica-rileva se il browser utilizza innerText
o textContent
, cercando per l'esistenza della proprietà sull'elemento (che è quello che l'operatore in
fa, controlla se un oggetto ha una proprietà con il nome dato, anche se quella proprietà è vuota, null
, undefined
, ecc.).
Si può anche scrivere da soli una funzione per esso:
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;
})();
che fa la funzione di rilevamento una volta, e restituisce una funzione qualsiasi motore di mezza decente in linea per voi.
In alternativa, se si desidera che il markup HTML nel messaggio venga gestito come markup (anziché come testo letterale), è sufficiente utilizzare innerHTML
(che è coerente tra i browser). Ma ancora una volta, se si utilizza innerHTML
, verrà elaborato il markup che potrebbe non essere quello che si desidera.
ritengo utile per utilizzare una buona libreria JavaScript per affrontare queste differenze tra i browser (e per fornire un tonnellata di utili ulteriori funzionalità), come ad esempio jQuery, YUI, Closure o any of several others. Ovviamente non c'è niente che puoi fare con una libreria che non puoi fare a meno di una, è solo questione di stare sulle spalle di persone che hanno già fatto un enorme lavoro. :-)
In questo caso, per esempio, utilizzando jQuery quanto sopra sarebbe:
$("#d").text("new text");
Questo è tutto.
Perché non si mette la seconda soluzione in una funzione con un parametro per l'elemento e uno per la stringa. Quindi dovresti semplicemente eseguire 'setText (mydiv," nuovo testo ");' –
non è 'document.getElementByid' dovrebbe essere' document.getElementById' 'I' di' id' dovrebbe essere in maiuscolo. –
'd [('innerText' in d)? 'innerText': 'textContent'] = 'Nuovo testo'; ' –