Il convient également de noter que la longueur est également différente entre les deux. jsfiddle.net/sUTVg/458
GreeKatrina
5
@aequalsb Je reconnais que c'est une vieille question maintenant, mais je dois remarquer que le défaut d'utiliser ´.html () ´ est dangereux à cause du texte traité comme HTML. Si vous obtenez ce texte à partir d'un paramètre de chaîne de requête, d'un formulaire, d'un en-tête, de l'URL ou de tout autre endroit que quelqu'un d'autre que vous pouvez fournir ou modifier le texte, alors vous êtes grand ouvert pour XSS.
Canis
105
((veuillez mettre à jour si nécessaire, cette réponse est un wiki))
Sous-question: quand seulement du texte, qu'est-ce qui est plus rapide, .text()ou .html()?
Donc, en conclusion, si vous n'avez "qu'un texte", utilisez la html()méthode.
Remarque: cela n'a pas de sens? N'oubliez pas que la .html()fonction n'est qu'un wrapper .innerHTML, mais dans la .text()fonction jQuery ajoute un "filtre d'entité" , et ce filtre consomme naturellement du temps.
Ok, si vous voulez vraiment des performances ... Utilisez du Javascript pur pour accéder directement au remplacement de texte par la nodeValuepropriété. Conclusions de référence:
jQuery .html()est ~ 2x plus rapide que.text() .
JS pur .innerHTMLest ~ 3 fois plus rapide que.html() .
JS pur ' .nodeValueest ~ 50x plus rapide que .html(), ~ 100x que .text()et ~ 20x que .innerHTML.
PS: la .textContentpropriété a été introduite avec DOM-Level-3, .nodeValueest DOM-Level-2 et est plus rapide (!).
Salut @LinhDam. Hum ... en utilisant le benchmark complet , mon Firefox dit "JQ TIMES (3000x): html = 82 text = 254", "JS TIMES (3000x): html = 15 text = 4" ... Et mon Chrome dit "JQ FOIS (3000x): html = 82 text = 202 "," JS TIMES (3000x): html = 16 text = 0 ".... donc les deux (Firefox et Chrome) ont les mêmes rapports de temps .
Peter Krauss
pour être une véritable référence entre text () et html (), le sélecteur doit être fait ou getElementById ou $ ("# work") dans tous les cas ou vous pourrez également comparer le $ ("# work") vs getElementById
Octavioamu
66
Le premier exemple incorporera en fait du HTML dans le divtandis que le second exemple échappera au texte en remplaçant les caractères liés aux éléments par leurs entités de caractères correspondantes afin qu'il s'affiche littéralement (c'est-à-dire que le HTML sera affiché non rendu).
Désolé, je ne comprends pas très bien. Pourriez-vous expliquer davantage. Merci
Brettk
Que voulez-vous dire que le 2ème exemple "encodera"? C'est déjà de l'encodage, non?
Brettk
@Brettk - J'ai dit "encoder" mais c'était plus un glissement des doigts. J'ai changé ma réponse pour mieux refléter ce que je veux dire.
Andrew Hare
6
Il signifie que dans la .text()fonction, tout <sera remplacé par <. Ainsi, avec .html()le navigateur, vous verrez un lien et du texte en gras, .text()le navigateur verra tout sous forme de texte et ne fera pas de lien ou de texte en gras.
Mottie
59
La text()méthode entité-échappe à tout code HTML qui lui est transmis. Utilisationtext() lorsque vous souhaitez insérer du code HTML qui sera visible par les personnes qui consultent la page.
Cela aurait dû être inclus dans la réponse sélectionnée pour expliquer ce qui se passe réellement.
d512
27
En fait, les deux semblent quelque peu similaires, mais sont assez différents, cela dépend de votre utilisation ou de l'intention que vous souhaitez atteindre,
Où utiliser:
utiliser .html()pour opérer sur des conteneurs ayant des éléments html.
utiliser .text()pour modifier le texte des éléments ayant généralement des balises d'ouverture et de fermeture distinctes
Où ne pas utiliser:
.text() La méthode ne peut pas être utilisée sur des entrées de formulaire ou des scripts.
.val() pour les éléments d'entrée ou de zone de texte.
.html() pour la valeur d'un élément de script.
Récupérer du contenu HTML .text()convertira les balises HTML en entités HTML.
Différence:
.text() peut être utilisé dans les documents XML et HTML.
.html() est uniquement pour les documents html.
Consultez cet exemple sur jsfiddle pour voir les différences en action
Cette réponse était la plus simple à comprendre et la mieux formatée +1
Katie
Qu'est-ce que le diff bw :: html (data); & val (données); @Owais Qureshi
Gemme
9
Étrange que personne n'ait mentionné l'avantage de la prévention des scripts intersites .text()sur .html()(Bien que d'autres viennent de mentionner que.text() échappe aux données).
Il est toujours recommandé d'utiliser .text()lorsque vous souhaitez mettre à jour des données dans DOM qui ne sont que des données / texte pour que l'utilisateur puisse les voir.
.html() devrait être principalement utilisé pour obtenir le contenu HTML dans une div.
Utilisez .text (…) lorsque vous avez l'intention d'afficher la valeur sous forme de texte simple.
Utilisez .html (…) lorsque vous avez l'intention d'afficher la valeur sous forme de texte au format html (ou contenu HTML).
Vous devez absolument utiliser .text (...) lorsque vous n'êtes pas sûr que votre texte (par exemple provenant d'un contrôle d'entrée) ne contient pas de caractères / balises ayant une signification particulière en HTML.Ceci est très important car cela pourrait avoir pour conséquence que le texte ne s'affichera pas correctement mais cela pourrait également provoquer l' activation d'un extrait de script JS indésirable (par exemple provenant d'une autre entrée utilisateur) .
Fondamentalement, $ ("# div"). Html utilise element.innerHTML pour définir le contenu, et $ ("# div"). Text (probablement) utilise element.textContent.
$ ('. div'). html (val) définira les valeurs HTML de tous les éléments sélectionnés, $ ('. div'). text (val) définira les valeurs textuelles de tous les éléments sélectionnés.
La différence est .html()évaluée en html, .text()avaluée en texte.
Considérons un bloc de HTML html
<divid="mydiv"><divclass="mydiv">
This is a div container
<ul><li><ahref="#">Link 1</a></li><li><ahref="#">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'
.text()vous donnera le texte réel entre les balises HTML. Par exemple, le texte du paragraphe entrep balises. Ce qui est intéressant à noter, c'est qu'il vous donnera tout le texte de l'élément que vous visez avec votre $sélecteur ainsi que tout le texte des éléments enfants de cet élément sélectionné. Donc, si vous avez plusieurs pbalises avec du texte à l'intérieur de l'élément body et que vous en faites un $(body).text(), vous obtiendrez tout le texte de tous les paragraphes. (Texte uniquement, pas lep balises elles-mêmes.)
.html()vous donnera le texte et les balises. Donc $(body).html(), vous donnera essentiellement votre page HTML entière
.val()fonctionne pour les éléments qui ont un valueattribut, tels que input. Un inputne contient pas de texte ou HTML et donc .text()et .html()sera tous deuxnull pour les inputéléments.
Veuillez corriger votre réponse, le premier extrait doit être utilisé text().
MKaama
0
fonction de texte définir ou récupérer la valeur en texte brut, sinon, la fonction HTML définir ou récupérer la valeur en tant que balises HTML pour changer ou modifier cela. Si vous souhaitez simplement modifier le contenu, utilisez text (). Mais si vous devez modifier le balisage, vous devez utiliser hmtl ().
C'est une réponse factice pour moi après six ans, ça ne fait rien.
text()
méthode est plus rapide ?? Combien?Réponses:
Je pense que la différence va presque de soi. Et c'est super trivial à tester.
jQuery.html()
traite la chaîne comme du HTML,jQuery.text()
traite le contenu comme du texteUne différence qui n'est peut-être pas aussi évidente est décrite dans la documentation de l'API jQuery
Dans la documentation de .html () :
Et dans la documentation de .text () :
la source
((veuillez mettre à jour si nécessaire, cette réponse est un wiki))
Sous-question: quand seulement du texte, qu'est-ce qui est plus rapide,
.text()
ou.html()
?Réponse:
.html()
c'est plus rapide! Voir ici un "kit de test de comportement" pour toute la question .Donc, en conclusion, si vous n'avez "qu'un texte", utilisez la
html()
méthode.Remarque: cela n'a pas de sens? N'oubliez pas que la
.html()
fonction n'est qu'un wrapper.innerHTML
, mais dans la.text()
fonction jQuery ajoute un "filtre d'entité" , et ce filtre consomme naturellement du temps.Ok, si vous voulez vraiment des performances ... Utilisez du Javascript pur pour accéder directement au remplacement de texte par la
nodeValue
propriété. Conclusions de référence:.html()
est ~ 2x plus rapide que.text()
..innerHTML
est ~ 3 fois plus rapide que.html()
..nodeValue
est ~ 50x plus rapide que.html()
, ~ 100x que.text()
et ~ 20x que.innerHTML
.PS: la
.textContent
propriété a été introduite avec DOM-Level-3,.nodeValue
est DOM-Level-2 et est plus rapide (!).Voir cette référence complète :
la source
nodeValue
propriété, elle transforme ">" en "& lt;", etc..text()
semble ~ 7 fois plus rapide que.html()
). Code source: codepen.io/damhonglinh/pen/vGpQEO . J'ai testé avec 1500 éléments;.html()
a pris ~ 220 ms et a.text()
pris ~ 30 ms.Le premier exemple incorporera en fait du HTML dans le
div
tandis que le second exemple échappera au texte en remplaçant les caractères liés aux éléments par leurs entités de caractères correspondantes afin qu'il s'affiche littéralement (c'est-à-dire que le HTML sera affiché non rendu).la source
.text()
fonction, tout<
sera remplacé par<
. Ainsi, avec.html()
le navigateur, vous verrez un lien et du texte en gras,.text()
le navigateur verra tout sous forme de texte et ne fera pas de lien ou de texte en gras.La
text()
méthode entité-échappe à tout code HTML qui lui est transmis. Utilisationtext()
lorsque vous souhaitez insérer du code HTML qui sera visible par les personnes qui consultent la page.Techniquement, votre deuxième exemple produit:
qui serait rendu dans le navigateur comme:
Votre premier exemple sera rendu sous forme de lien réel et de texte en gras.
la source
En fait, les deux semblent quelque peu similaires, mais sont assez différents, cela dépend de votre utilisation ou de l'intention que vous souhaitez atteindre,
Où utiliser:
.html()
pour opérer sur des conteneurs ayant des éléments html..text()
pour modifier le texte des éléments ayant généralement des balises d'ouverture et de fermeture distinctesOù ne pas utiliser:
.text()
La méthode ne peut pas être utilisée sur des entrées de formulaire ou des scripts..val()
pour les éléments d'entrée ou de zone de texte..html()
pour la valeur d'un élément de script.Récupérer du contenu HTML
.text()
convertira les balises HTML en entités HTML.Différence:
.text()
peut être utilisé dans les documents XML et HTML..html()
est uniquement pour les documents html.Consultez cet exemple sur jsfiddle pour voir les différences en action
Exemple
la source
Étrange que personne n'ait mentionné l'avantage de la prévention des scripts intersites
.text()
sur.html()
(Bien que d'autres viennent de mentionner que.text()
échappe aux données).Il est toujours recommandé d'utiliser
.text()
lorsque vous souhaitez mettre à jour des données dans DOM qui ne sont que des données / texte pour que l'utilisateur puisse les voir..html()
devrait être principalement utilisé pour obtenir le contenu HTML dans une div.la source
Utilisez .text (…) lorsque vous avez l'intention d'afficher la valeur sous forme de texte simple.
Utilisez .html (…) lorsque vous avez l'intention d'afficher la valeur sous forme de texte au format html (ou contenu HTML).
Vous devez absolument utiliser .text (...) lorsque vous n'êtes pas sûr que votre texte (par exemple provenant d'un contrôle d'entrée) ne contient pas de caractères / balises ayant une signification particulière en HTML.Ceci est très important car cela pourrait avoir pour conséquence que le texte ne s'affichera pas correctement mais cela pourrait également provoquer l' activation d'un extrait de script JS indésirable (par exemple provenant d'une autre entrée utilisateur) .
la source
Fondamentalement, $ ("# div"). Html utilise element.innerHTML pour définir le contenu, et $ ("# div"). Text (probablement) utilise element.textContent.
http://docs.jquery.com/Attributes/html :
http://docs.jquery.com/Attributes/text :
la source
$ ('. div'). html (val) définira les valeurs HTML de tous les éléments sélectionnés, $ ('. div'). text (val) définira les valeurs textuelles de tous les éléments sélectionnés.
Documents API pour jQuery.text ()
Documents API pour jQuery.html ()
Je suppose qu'ils correspondent au Node # textContent et à l' élément # innerHTML , respectivement. (Références Gecko DOM).
la source
Eh bien en termes simples.
html () - pour obtenir le html interne (balises html et texte).
text () - pour obtenir uniquement du texte s'il est présent à l'intérieur (uniquement du texte)
la source
La différence est
.html()
évaluée en html,.text()
avaluée en texte.Considérons un bloc de HTML html
JS
L'illustration provient de ce lien http://api.jquery.com/text/
la source
.text()
vous donnera le texte réel entre les balises HTML. Par exemple, le texte du paragraphe entrep
balises. Ce qui est intéressant à noter, c'est qu'il vous donnera tout le texte de l'élément que vous visez avec votre$
sélecteur ainsi que tout le texte des éléments enfants de cet élément sélectionné. Donc, si vous avez plusieursp
balises avec du texte à l'intérieur de l'élément body et que vous en faites un$(body).text()
, vous obtiendrez tout le texte de tous les paragraphes. (Texte uniquement, pas lep
balises elles-mêmes.).html()
vous donnera le texte et les balises. Donc$(body).html()
, vous donnera essentiellement votre page HTML entière.val()
fonctionne pour les éléments qui ont unvalue
attribut, tels queinput
. Uninput
ne contient pas de texte ou HTML et donc.text()
et.html()
sera tous deuxnull
pour lesinput
éléments.la source
Je pense que la différence est d'insérer une balise html dans
text()
votre balise html ne fonctionne pasproduction :
remplacer
text()
parhtml()
production
alors la balise
<br>
fonctionne enhtml()
la source
text()
.fonction de texte définir ou récupérer la valeur en texte brut, sinon, la fonction HTML définir ou récupérer la valeur en tant que balises HTML pour changer ou modifier cela. Si vous souhaitez simplement modifier le contenu, utilisez text (). Mais si vous devez modifier le balisage, vous devez utiliser hmtl ().
C'est une réponse factice pour moi après six ans, ça ne fait rien.
la source