Risposte:
Penso che la differenza sia quasi autoesplicativa. Ed è super banale da testare.
jQuery.html()
tratta la stringa come HTML, jQuery.text()
tratta il contenuto come testo
<html>
<head>
<title>Test Page</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$("#div1").html('<a href="example.html">Link</a><b>hello</b>');
$("#div2").text('<a href="example.html">Link</a><b>hello</b>');
});
</script>
</head>
<body>
<div id="div1"></div>
<div id="div2"></div>
</body>
</html>
Una differenza che potrebbe non essere così ovvia è descritta nella documentazione dell'API jQuery
Nella documentazione per .html () :
Il
.html()
metodo non è disponibile nei documenti XML.
E nella documentazione per .text () :
A differenza del
.html()
metodo,.text()
può essere utilizzato sia in documenti XML che HTML.
$(function() {
$("#div1").html('<a href="example.html">Link</a><b>hello</b>');
$("#div2").text('<a href="example.html">Link</a><b>hello</b>');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<div id="div1"></div>
<div id="div2"></div>
((si prega di aggiornare se necessario, questa risposta è un Wiki))
.text()
o .html()
?Risposta: .html()
è più veloce! Vedi qui un "kit di test comportamentali" per tutte le domande .
Quindi, in conclusione, se hai "solo un testo", usa il html()
metodo.
Nota: non ha senso? Ricorda che la .html()
funzione è solo un wrapper .innerHTML
, ma nella .text()
funzione jQuery aggiunge un "filtro entità" e questo filtro consuma naturalmente tempo.
Ok, se vuoi davvero prestazioni ... Usa Javascript puro per accedere alla sostituzione diretta del testo da parte della nodeValue
proprietà. Conclusioni di benchmark:
.html()
è ~ 2x più veloce di .text()
..innerHTML
è ~ 3 volte più veloce di .html()
..nodeValue
è ~ 50x più veloce di .html()
, ~ 100x di .text()
e ~ 20x di .innerHTML
.PS: la .textContent
proprietà è stata introdotta con DOM-Level-3, .nodeValue
è DOM-Level-2 ed è più veloce (!).
Vedi questo benchmark completo :
// Using jQuery:
simplecron.restart(); for (var i=1; i<3000; i++)
$("#work").html('BENCHMARK WORK');
var ht = simplecron.duration();
simplecron.restart(); for (var i=1; i<3000; i++)
$("#work").text('BENCHMARK WORK');
alert("JQuery (3000x): \nhtml="+ht+"\ntext="+simplecron.duration());
// Using pure JavaScript only:
simplecron.restart(); for (var i=1; i<3000; i++)
document.getElementById('work').innerHTML = 'BENCHMARK WORK';
ht = simplecron.duration();
simplecron.restart(); for (var i=1; i<3000; i++)
document.getElementById('work').nodeValue = 'BENCHMARK WORK';
alert("Pure JS (3000x):\ninnerHTML="+ht+"\nnodeValue="+simplecron.duration());
nodeValue
proprietà, trasforma ">" in "& lt;", ecc.
.text()
sembra ~ 7 volte più veloce di .html()
). Codice sorgente: codepen.io/damhonglinh/pen/vGpQEO . Ho provato con 1500 elementi; .html()
ha preso ~ 220ms e ha .text()
preso ~ 30ms.
Il primo esempio incorporerà effettivamente l'HTML all'interno div
mentre il secondo esempio sfuggirà al testo sostituendo i caratteri relativi agli elementi con le entità dei caratteri corrispondenti in modo che vengano visualizzati letteralmente (ovvero l'HTML verrà visualizzato non visualizzato).
.text()
funzione, tutto <
verrà sostituito con <
. Quindi con .html()
il browser vedrà un collegamento e del testo in grassetto, con .text()
il browser vedrà tutto come testo e non creare un collegamento o un testo in grassetto.
Il text()
metodo esegue l'escape di qualsiasi codice HTML che vi viene passato. Utilizzare text()
quando si desidera inserire un codice HTML che sarà visibile alle persone che visualizzano la pagina.
Tecnicamente, il tuo secondo esempio produce:
<a href="example.html">Link</a><b>hello</b>
che verrebbe visualizzato nel browser come:
<a href="example.html">Link</a><b>hello</b>
Il tuo primo esempio verrà visualizzato come un link reale e del testo in grassetto.
In realtà entrambi sembrano in qualche modo simili ma sono piuttosto diversi, dipende dal tuo utilizzo o dalle tue intenzioni ciò che vuoi ottenere,
.html()
per operare su contenitori con elementi html..text()
per modificare il testo di elementi che di solito hanno tag di apertura e chiusura separati.text()
il metodo non può essere utilizzato su input di moduli o script.
.val()
per elementi di input o textarea..html()
per valore di un elemento script.La raccolta di contenuti HTML da .text()
convertirà i tag HTML in entità HTML.
.text()
può essere utilizzato sia in documenti XML che HTML..html()
è solo per documenti HTML.Controlla questo esempio su jsfiddle per vedere le differenze nell'azione
Strano che nessuno abbia menzionato il vantaggio della prevenzione di scripting Cross Site di .text()
Over .html()
(anche se altri lo hanno appena menzionato.text()
sfugge ai dati).
Si consiglia sempre di utilizzare .text()
quando si desidera aggiornare i dati in DOM che sono solo dati / testo che l'utente può vedere.
.html()
dovrebbe essere utilizzato principalmente per ottenere il contenuto HTML all'interno di un div.
Utilizzare .text (...) quando si intende visualizzare il valore come testo semplice.
Utilizzare .html (...) quando si intende visualizzare il valore come testo in formato html (o contenuto HTML).
Dovresti assolutamente usare .text (...) quando non sei sicuro che il tuo testo (es. Proveniente da un controllo di input) non contenga caratteri / tag che hanno un significato speciale in HTML. Ciò è molto importante perché ciò potrebbe comportare la visualizzazione non corretta del testo, ma potrebbe anche attivare l'attivazione di uno snippet di script JS indesiderato (ad es. Proveniente da un altro input dell'utente) .
Fondamentalmente, $ ("# div"). Html usa element.innerHTML per impostare i contenuti e $ ("# div"). Text (probabilmente) usa element.textContent.
http://docs.jquery.com/Attributes/html :
Set the html contents of every matched element
http://docs.jquery.com/Attributes/text :
Similar to html(), but escapes HTML (replace "<" and ">" with their HTML
entities).
$ ('. div'). html (val) imposterà i valori HTML di tutti gli elementi selezionati, $ ('. div'). text (val) imposterà i valori di testo di tutti gli elementi selezionati.
Documenti API per jQuery.text ()
Documenti API per jQuery.html ()
Immagino che corrispondano rispettivamente a Node # textContent e Element # innerHTML . (Riferimenti DOM Gecko).
Bene in parole semplici.
html () - per ottenere html interno (tag e testo html).
text () - per ottenere solo testo se presente all'interno (solo testo)
Il diverso è .html()
valutato come html, valutato come .text()
testo.
Prendi in considerazione un blocco di HTML
HTML
<div id="mydiv">
<div class="mydiv">
This is a div container
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
</ul>
a text after ul
</div>
</div>
JS
var out1 = $('#mydiv').html();
var out2 = $('#mydiv').text();
console.log(out1) // This output all the html tag
console.log(out2) // This is output just the text 'This is a div container Link 1 Link 2 a text after ul'
L'illustrazione è da questo link http://api.jquery.com/text/
.text()
ti fornirà il testo effettivo tra i tag HTML. Ad esempio, il testo del paragrafo tra i p
tag. La cosa interessante da notare è che ti fornirà tutto il testo nell'elemento con cui stai prendendo di mira con il tuo $
selettore più tutto il testo negli elementi figlio di quell'elemento selezionato. Quindi, se hai più p
tag con testo all'interno dell'elemento body e fai un $(body).text()
, otterrai tutto il testo da tutti i paragrafi. (Solo testo, non i p
tag stessi.)
.html()
ti darà il testo e i tag. Quindi $(body).html()
fondamentalmente ti darà l'intera pagina HTML della tua pagina
.val()
funziona per elementi che hanno un value
attributo, come ad esempio input
. An input
non ha contenuto di testo o HTML e quindi .text()
e .html()
sarà sia null
per gli input
elementi.
Penso che la differenza sia inserire il tag html nel text()
tuo tag html non funziona
$('#output').html('You are registered'+'<br>' +' '
+ 'Mister'+' ' + name+' ' + sourname ); }
produzione :
You are registered <br> Mister name sourname
sostituendo text()
conhtml()
produzione
You are registered
Mister name sourname
quindi il tag <br>
funzionahtml()
text()
.
funzione di testo imposta o recupera il valore come testo normale, altrimenti funzione HTML imposta o recupera il valore come tag HTML per cambiarlo o modificarlo. Se vuoi solo cambiare il contenuto, usa text (). Ma se è necessario modificare il markup, è necessario utilizzare hmtl ().
È una risposta fittizia per me dopo sei anni, non importa.
text()
metodo è più veloce ?? Quanto?