Respuestas:
Creo que la diferencia se explica por sí misma. Y es super trivial probarlo.
jQuery.html()
trata la cadena como HTML, jQuery.text()
trata el contenido como texto
<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 diferencia que puede no ser tan obvia se describe en la documentación de la API jQuery
En la documentación para .html () :
El
.html()
método no está disponible en documentos XML.
Y en la documentación para .text () :
A diferencia del
.html()
método,.text()
se puede utilizar en documentos XML y 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>
((actualice si es necesario, esta respuesta es un Wiki))
.text()
o .html()
?Respuesta: .html()
es más rápido! Vea aquí un "kit de prueba de comportamiento" para todas las preguntas .
En conclusión, si tiene "solo un texto", utilice el html()
método.
Nota: ¿No tiene sentido? Recuerde que la .html()
función es solo un contenedor .innerHTML
, pero en la .text()
función jQuery agrega un "filtro de entidad" , y este filtro naturalmente consume tiempo.
Ok, si realmente quieres rendimiento ... Utiliza Javascript puro para acceder al reemplazo directo de texto por la nodeValue
propiedad. Conclusiones de referencia:
.html()
es ~ 2 veces más rápido que .text()
..innerHTML
es ~ 3 veces más rápido que .html()
..nodeValue
es ~ 50 .html()
veces más rápido que , ~ 100 veces más .text()
y ~ 20 veces más que .innerHTML
.PD: la .textContent
propiedad se introdujo con DOM-Level-3, .nodeValue
es DOM-Level-2 y es más rápido (!).
Vea este punto de referencia 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
propiedad, transforma ">" en "& lt;", etc.
.text()
parece ~ 7 veces más rápido que .html()
). Código fuente: codepen.io/damhonglinh/pen/vGpQEO . Probé con 1500 elementos; .html()
tomó ~ 220ms y .text()
tomó ~ 30ms.
El primer ejemplo en realidad incrustará HTML dentro del div
mientras que el segundo ejemplo escapará del texto mediante el reemplazo de caracteres relacionados con elementos con sus entidades de caracteres correspondientes para que se muestre literalmente (es decir, el HTML se mostrará no representado).
.text()
función, todo <
será reemplazado por <
. Entonces, con .html()
el navegador verá un enlace y texto en negrita, con .text()
el navegador verá todo como texto y no creará un enlace o texto en negrita.
El text()
método entidad escapa a cualquier HTML que se le pase. Úselo text()
cuando desee insertar código HTML que será visible para las personas que vean la página.
Técnicamente, su segundo ejemplo produce:
<a href="example.html">Link</a><b>hello</b>
que se representaría en el navegador como:
<a href="example.html">Link</a><b>hello</b>
Su primer ejemplo se representará como un enlace real y un texto en negrita.
En realidad, ambos parecen algo similares, pero son bastante diferentes, depende de su uso o intención de lo que desea lograr,
.html()
para operar en contenedores que tienen elementos html..text()
para modificar el texto de elementos que generalmente tienen etiquetas separadas de apertura y cierre.text()
El método no se puede utilizar en entradas de formulario o scripts.
.val()
para elementos de entrada o textarea..html()
para el valor de un elemento de script.Recoger contenido html de .text()
convertirá las etiquetas html en entidades html.
.text()
se puede usar en documentos XML y HTML..html()
es solo para documentos html.Verifique este ejemplo en jsfiddle para ver las diferencias en acción
Es extraño que nadie mencione el beneficio de prevención de scripts de Cross Site de .text()
más .html()
(aunque otros acaban de mencionar que se .text()
escapa de los datos).
Siempre se recomienda usar .text()
cuando desee actualizar datos en DOM, que son solo datos / texto para que el usuario los vea.
.html()
debe usarse principalmente para obtener el contenido HTML dentro de un div.
Use .text (...) cuando tenga la intención de mostrar el valor como un texto simple.
Utilice .html (...) cuando tenga la intención de mostrar el valor como texto con formato html (o contenido HTML).
Definitivamente debe usar .text (...) cuando no está seguro de que su texto (por ejemplo, proveniente de un control de entrada) no contenga caracteres / etiquetas que tengan un significado especial en HTML. Esto es realmente importante porque esto podría provocar que el texto no se muestre correctamente, pero también podría provocar que se active un fragmento de script JS no deseado (por ejemplo, proveniente de otra entrada del usuario) .
Básicamente, $ ("# div"). Html usa element.innerHTML para establecer contenidos, y $ ("# div"). Text (probablemente) 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) establecerá los valores HTML de todos los elementos seleccionados, $ ('. div'). text (val) establecerá los valores de texto de todos los elementos seleccionados.
Documentos API para jQuery.text ()
Documentos de API para jQuery.html ()
Supongo que corresponden al Nodo # textContent y al Elemento # innerHTML , respectivamente. (Referencias DOM Gecko).
Bueno en términos simples.
html (): para obtener html interno (etiquetas y texto html).
text (): para obtener solo texto si está presente dentro (solo texto)
Lo diferente se .html()
evalúa como un html, se .text()
valora como un texto.
Considere un bloque 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'
La ilustración es de este enlace http://api.jquery.com/text/
.text()
le dará el texto real entre las etiquetas HTML. Por ejemplo, el texto del párrafo entre p
etiquetas. Es interesante notar que le dará todo el texto en el elemento que está apuntando con su $
selector más todo el texto en los elementos secundarios de ese elemento seleccionado. Entonces, si tiene varias p
etiquetas con texto dentro del elemento del cuerpo y hace una $(body).text()
, obtendrá todo el texto de todos los párrafos. (Solo texto, no las p
etiquetas en sí).
.html()
te dará el texto y las etiquetas. Así que $(body).html()
básicamente le dará a su página HTML toda la página
.val()
funciona para elementos que tienen un value
atributo, como input
. Una input
no tiene texto contenido o HTML y por lo tanto .text()
, y .html()
ambos estarán null
de input
elementos.
Creo que la diferencia es insertar una etiqueta html en text()
tu etiqueta html que no funciona
$('#output').html('You are registered'+'<br>' +' '
+ 'Mister'+' ' + name+' ' + sourname ); }
salida:
You are registered <br> Mister name sourname
reemplazando text()
conhtml()
salida
You are registered
Mister name sourname
entonces la etiqueta <br>
funciona enhtml()
text()
.
la función de texto establece o recupera el valor como texto sin formato; de lo contrario, la función HTML establece o recupera el valor como etiquetas HTML para cambiar o modificar eso. Si solo desea cambiar el contenido, use text (). Pero si necesita cambiar el marcado, debe usar hmtl ().
Es una respuesta ficticia para mí después de seis años, no importa.
text()
método es más rápido? ¿Cuánto cuesta?