Cabe señalar también, que la longitud es diferente entre los dos también. jsfiddle.net/sUTVg/458
GreeKatrina
55
@aequalsb Reconozco que esta es una pregunta vieja ahora, pero tengo que comentar que el uso predeterminado de ´.html () ´ es peligroso debido a que el texto se trata como HTML. Si obtiene ese texto de un parámetro de cadena de consulta, formulario, encabezado, URL o cualquier otro lugar que alguien más que usted pueda proporcionar o editar el texto, entonces está completamente abierto para XSS.
Canis
105
((actualice si es necesario, esta respuesta es un Wiki))
Subpregunta: cuando solo es texto, ¿qué es más rápido .text()o .html()?
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 nodeValuepropiedad. Conclusiones de referencia:
jQuery .html()es ~ 2 veces más rápido que .text().
pure JS ' .innerHTMLes ~ 3 veces más rápido que .html().
pure JS ' .nodeValuees ~ 50 .html()veces más rápido que , ~ 100 veces más .text()y ~ 20 veces más que .innerHTML.
PD: la .textContentpropiedad se introdujo con DOM-Level-3, .nodeValuees DOM-Level-2 y es más rápido (!).
Hola @LinhDam Hum ... usando el punto de referencia completo , mi Firefox dice "JQ TIMES (3000x): html = 82 text = 254", "JS TIMES (3000x): html = 15 text = 4" ... Y mi Chrome dice "JQ TIMES (3000x): html = 82 text = 202 "," JS TIMES (3000x): html = 16 text = 0 ".... por lo que ambos (Firefox y Chrome) tienen las mismas relaciones de tiempo .
Peter Krauss
para ser un punto de referencia real entre text () y html (), el selector se debe hacer o getElementById o $ ("# work") en todos los casos, o se comparará también el $ ("# work") vs getElementById
Octavioamu
66
El primer ejemplo en realidad incrustará HTML dentro del divmientras 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).
Lo siento, no entiendo del todo. ¿Podría explicar más? Gracias
Brettk
¿Qué quiere decir que el segundo ejemplo "codificará"? Ya está codificando, ¿no?
Brettk
@Brettk - Dije "codificar" pero eso fue más un deslizamiento de los dedos Cambié mi respuesta para reflejar mejor lo que quiero decir.
Andrew Hare
66
Quiere decir que en la .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.
Mottie
59
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.
Esta respuesta fue la más fácil de entender y mejor formateada +1
Katie
¿Qué es el diff bw :: html (data); & val (datos); @Owais Qureshi
Gema
9
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) .
$ ('. 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.
Lo diferente se .html()evalúa como un html, se .text()valora como un texto.
Considere un bloque 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()le dará el texto real entre las etiquetas HTML. Por ejemplo, el texto del párrafo entre petiquetas. 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 petiquetas 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 petiquetas 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 valueatributo, como input. Una inputno tiene texto contenido o HTML y por lo tanto .text(), y .html()ambos estarán nullde inputelementos.
Corrija su respuesta, debe usar el primer fragmento text().
MKaama
0
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?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 textoUna diferencia que puede no ser tan obvia se describe en la documentación de la API jQuery
En la documentación para .html () :
Y en la documentación para .text () :
fuente
((actualice si es necesario, esta respuesta es un Wiki))
Subpregunta: cuando solo es texto, ¿qué es más rápido
.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 :
fuente
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).fuente
.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. Úselotext()
cuando desee insertar código HTML que será visible para las personas que vean la página.Técnicamente, su segundo ejemplo produce:
que se representaría en el navegador como:
Su primer ejemplo se representará como un enlace real y un texto en negrita.
fuente
En realidad, ambos parecen algo similares, pero son bastante diferentes, depende de su uso o intención de lo que desea lograr,
Dónde utilizar:
.html()
para operar en contenedores que tienen elementos html..text()
para modificar el texto de elementos que generalmente tienen etiquetas separadas de apertura y cierreDonde no usar:
.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.Diferencia:
.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
Ejemplo
fuente
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.fuente
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) .
fuente
Básicamente, $ ("# div"). Html usa element.innerHTML para establecer contenidos, y $ ("# div"). Text (probablemente) usa element.textContent.
http://docs.jquery.com/Attributes/html :
http://docs.jquery.com/Attributes/text :
fuente
$ ('. 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).
fuente
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)
fuente
Lo diferente se
.html()
evalúa como un html, se.text()
valora como un texto.Considere un bloque de HTML
HTML
JS
La ilustración es de este enlace http://api.jquery.com/text/
fuente
.text()
le dará el texto real entre las etiquetas HTML. Por ejemplo, el texto del párrafo entrep
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 variasp
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 lasp
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 unvalue
atributo, comoinput
. Unainput
no tiene texto contenido o HTML y por lo tanto.text()
, y.html()
ambos estaránnull
deinput
elementos.fuente
Creo que la diferencia es insertar una etiqueta html en
text()
tu etiqueta html que no funcionasalida:
reemplazando
text()
conhtml()
salida
entonces la etiqueta
<br>
funciona enhtml()
fuente
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.
fuente