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 texte
<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>
Une 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 () :
le
.html()
méthode n'est pas disponible dans les documents XML.
Et dans la documentation de .text () :
Contrairement à la
.html()
méthode,.text()
peut être utilisé dans les documents XML et 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>
((veuillez mettre à jour si nécessaire, cette réponse est un wiki))
.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 :
// 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
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).
.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:
<a href="example.html">Link</a><b>hello</b>
qui serait rendu dans le navigateur comme:
<a href="example.html">Link</a><b>hello</b>
Votre premier exemple sera rendu sous forme de lien réel et de texte en gras.
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,
.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 distinctes.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.
.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
É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.
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) 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).
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 différence est .html()
évaluée en html, .text()
avaluée en texte.
Considérons un bloc de 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'illustration provient de ce lien http://api.jquery.com/text/
.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 p
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 un value
attribut, tels que input
. Un input
ne contient pas de texte ou HTML et donc .text()
et .html()
sera tous deuxnull
pour les input
éléments.
Je pense que la différence est d'insérer une balise html dans text()
votre balise html ne fonctionne pas
$('#output').html('You are registered'+'<br>' +' '
+ 'Mister'+' ' + name+' ' + sourname ); }
production :
You are registered <br> Mister name sourname
remplacer text()
parhtml()
production
You are registered
Mister name sourname
alors la balise <br>
fonctionne enhtml()
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.
text()
méthode est plus rapide ?? Combien?