Come posso sostituire il testo all'interno di un elemento div?
-
02-07-2019 - |
Domanda
Devo impostare dinamicamente il testo all'interno di un elemento DIV. Qual è il miglior approccio sicuro per i browser? Ho prototypejs e scriptaculous disponibili.
<div id="panel">
<div id="field_name">TEXT GOES HERE</div>
</div>
Ecco come apparirà la funzione:
function showPanel(fieldName) {
var fieldNameElement = document.getElementById('field_name');
//Make replacement here
}
Soluzione
Vorrei usare il metodo update
di Prototype che supporta il testo semplice, uno snippet HTML o qualsiasi oggetto JavaScript che definisce un metodo toString
.
$("field_name").update("New text");
Altri suggerimenti
Puoi semplicemente usare:
fieldNameElement.innerHTML = "My new text!";
Aggiornato per tutti coloro che leggono questo nel 2013 e in seguito:
Questa risposta ha molto SEO, ma tutte le risposte sono molto obsolete e dipendono dalle librerie per fare cose che tutti gli attuali browser fanno immediatamente.
fieldNameElement.textContent = "New text";
function showPanel(fieldName) {
var fieldNameElement = document.getElementById("field_name");
while(fieldNameElement.childNodes.length >= 1) {
fieldNameElement.removeChild(fieldNameElement.firstChild);
}
fieldNameElement.appendChild(fieldNameElement.ownerDocument.createTextNode(fieldName));
}
I vantaggi di farlo in questo modo:
- Utilizza solo il DOM, quindi la tecnica è portatile in altre lingue e non si basa sull'HTML interno non standard
- fieldName potrebbe contenere HTML, che potrebbe essere un tentativo di attacco XSS. Se sappiamo che è solo testo, dovremmo creare un nodo di testo, invece di far analizzare il browser per HTML
Se avessi usato una libreria javascript, avrei usato jQuery e avrei fatto questo:
$("div#field_name").text(fieldName);
Nota che il commento di @AnthonyWJones è corretto: " field_name " non è un ID particolarmente descrittivo o un nome di variabile.
$('field_name').innerHTML = 'Your text.';
Una delle caratteristiche eleganti di Prototype è che $ ('field_name')
fa la stessa cosa di document.getElementById ('field_name')
. Usalo! : -)
La risposta di John Topley usando la funzione update
di Prototype è un'altra buona soluzione.
La risposta rapida è usare innerHTML (o il metodo di aggiornamento del prototipo che è praticamente la stessa cosa). Il problema con innerHTML è che devi evitare il contenuto assegnato. A seconda dei tuoi obiettivi, dovrai farlo con un altro codice OPPURE
in IE: -
document.getElementById("field_name").innerText = newText;
in FF: -
document.getElementById("field_name").textContent = newText;
(In realtà di FF sono presenti i seguenti codici)
HTMLElement.prototype.__defineGetter__("innerText", function () { return this.textContent; })
HTMLElement.prototype.__defineSetter__("innerText", function (inputText) { this.textContent = inputText; })
Ora posso usare innerText se hai bisogno del più ampio supporto possibile per il browser, quindi questa non è una soluzione completa, ma nemmeno usa innerHTML in raw.
Se vuoi davvero che continuiamo da dove eri rimasto, potresti fare:
if (fieldNameElement)
fieldNameElement.innerHTML = 'some HTML';
nodeValue è anche una proprietà DOM standard che è possibile utilizzare:
function showPanel(fieldName) {
var fieldNameElement = document.getElementById(field_name);
if(fieldNameElement.firstChild)
fieldNameElement.firstChild.nodeValue = "New Text";
}
el.innerHTML='';
el.appendChild(document.createTextNode("yo"));
Se sei propenso a iniziare a utilizzare molto JavaScript sul tuo sito, jQuery rende estremamente semplice giocare con il DOM.
http://docs.jquery.com/Manipulation
Lo rende semplice come: $ (" # field-name "). text (" Alcuni nuovi testi. ");
Usa innerText se non puoi assumere la struttura - Usa i dati di testo # per aggiornare il testo esistente Test delle prestazioni
function showPanel(fieldName) {
var fieldNameElement = document.getElementById(field_name);
fieldNameElement.removeChild(fieldNameElement.firstChild);
var newText = document.createTextNode("New Text");
fieldNameElement.appendChild(newText);
}
Ecco un semplice jQuery :
var el = $('#yourid .yourclass');
el.html(el.html().replace(/Old Text/ig, "New Text"));