Deve-se notar também, que o comprimento também é diferente entre os dois. jsfiddle.net/sUTVg/458
GreeKatrina
5
@ aequalsb Eu reconheço que essa é uma pergunta antiga agora, mas tenho que observar que o não uso de 'html ()' é perigoso por causa do texto ser tratado como HTML. Se você obtiver esse texto de um parâmetro, formulário, cabeçalho, URL ou qualquer outro local que outra pessoa que você não possa fornecer ou editar o texto, estará aberto para o XSS.
Canis
105
((atualize se necessário, esta resposta é um Wiki))
Subquestão: quando apenas texto, o que é mais rápido .text()ou .html()?
Portanto, em conclusão, se você tiver "apenas um texto", use o html()método
Nota: Não faz sentido? Lembre-se de que a .html()função é apenas um invólucro .innerHTML, mas na .text()função o jQuery adiciona um "filtro de entidade" e esse filtro naturalmente consome tempo.
Ok, se você realmente deseja desempenho ... Use Javascript puro para acessar a substituição direta de texto pela nodeValuepropriedade Conclusões de referência:
jQuery .html()é ~ 2x mais rápido que .text().
JS puro .innerHTMLé ~ 3x mais rápido que .html().
JS puro ' .nodeValueé ~ 50x mais rápido que .html(), ~ 100x que .text()e ~ 20x que .innerHTML.
PS: a .textContentpropriedade foi introduzida com o DOM-Level-3, .nodeValueé DOM-Level-2 e é mais rápida (!).
Olá @LinhDam. Hum ... usando o benchmark completo , meu Firefox diz "JQ TIMES (3000x): html = 82 text = 254", "JS TIMES (3000x): html = 15 text = 4" ... E meu Chrome diz "JQ TIMES (3000x): html = 82 texto = 202 "," JS TIMES (3000x): html = 16 texto = 0 ".... para que ambos (Firefox e Chrome) tenham as mesmas proporções de tempo .
Peter Krauss
para ser uma referência real entre text () e html (), o seletor deve ser executado ou getElementById ou $ ("# work") em todos os casos ou você fará um benchmarking também de $ ("# work") vs getElementById
Octavioamu
66
O primeiro exemplo, na verdade, incorporará o HTML ao divpasso que o segundo exemplo escapará do texto, substituindo os caracteres relacionados aos elementos pelas respectivas entidades de caracteres correspondentes , para que sejam exibidos literalmente (ou seja, o HTML será exibido sem renderização).
Desculpe, eu não entendo direito. Você poderia explicar melhor. Obrigado
Brettk
Como assim, o segundo exemplo "codificará"? Já está codificando, não?
Brettk
@Brettk - eu disse "codificar", mas isso foi mais um deslize dos dedos. Mudei minha resposta para refletir melhor o que quero dizer.
22715 Andrew Hare
6
Ele quer dizer que, na .text()função, tudo <será substituído por <. Portanto, com .html()o navegador, você verá um link e algum texto em negrito, com .text()o navegador verá tudo como texto e não criará um link ou texto em negrito.
Mottie
59
A text()entidade de método escapa qualquer HTML que é passado para ela. Use text()quando desejar inserir código HTML que ficará visível para as pessoas que visualizarem a página.
Esta resposta foi a mais fácil de entender e melhor formatada +1
Katie
Qual é o diff bw :: html (data); & val (dados); @Owais Qureshi
Gem
9
Estranho que ninguém mencione o benefício de prevenção de script entre sites de .text()mais .html()(embora outros tenham acabado de mencionar que .text()escapa aos dados).
É sempre recomendável usar .text()quando você deseja atualizar dados no DOM, que são apenas dados / texto para o usuário ver.
.html() deve ser usado principalmente para obter o conteúdo HTML dentro de uma div.
Use .text (…) quando pretender exibir o valor como um texto simples.
Use .html (…) quando pretender exibir o valor como um texto formatado em html (ou conteúdo HTML).
Você definitivamente deve usar .text (...) quando não tiver certeza de que seu texto (por exemplo, proveniente de um controle de entrada) não contém caracteres / tags com significado especial em HTML. Isso é realmente importante, pois isso pode resultar na exibição incorreta do texto, mas também pode causar a ativação de um snippet de script JS indesejado (por exemplo, proveniente de outra entrada do usuário) .
$ ('. div'). html (val) definirá os valores HTML de todos os elementos selecionados, $ ('. div'). text (val) definirá os valores de texto de todos os elementos selecionados.
O diferente é .html()avaliado como um html, .text()avaliado como um texto.
Considere um bloco 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()fornecerá o texto real entre as tags HTML. Por exemplo, o texto do parágrafo entre as ptags. O que é interessante notar é que ele fornecerá todo o texto do elemento que você está alvejando com o $seletor, além de todo o texto nos elementos filhos desse elemento selecionado. Portanto, se você tiver várias ptags com texto dentro do elemento body e fizer a $(body).text(), receberá todo o texto de todos os parágrafos. (Somente texto, não as ppróprias tags.)
.html()fornecerá o texto e as tags. Então $(body).html(), basicamente, você fornece toda a sua página HTML
.val()funciona para elementos que possuem um valueatributo, como input. Um inputnão tem texto contido ou HTML e, portanto, .text()e .html()serão ambos nullpara inputelementos.
Corrija sua resposta, o primeiro snippet deve ser usado text().
precisa saber é o seguinte
0
a função de texto define ou recupera o valor como texto sem formatação; caso contrário, a função HTML define ou recupera o valor como tags HTML para alterar ou modificar isso. Se você quiser apenas alterar o conteúdo, use texto (). Mas se você precisar alterar a marcação, use hmtl ().
É uma resposta idiota para mim depois de seis anos, não se importe.
text()
método é mais rápido? Quanto?Respostas:
Eu acho que a diferença é quase auto-explicativa. E é super trivial para testar.
jQuery.html()
trata a string como HTML,jQuery.text()
trata o conteúdo como textoUma diferença que pode não ser tão óbvia é descrita na documentação da API do jQuery
Na documentação de .html () :
E na documentação para .text () :
fonte
((atualize se necessário, esta resposta é um Wiki))
Subquestão: quando apenas texto, o que é mais rápido
.text()
ou.html()
?Resposta:
.html()
é mais rápido! Veja aqui um "kit de teste de comportamento" para todas as perguntas .Portanto, em conclusão, se você tiver "apenas um texto", use o
html()
métodoNota: Não faz sentido? Lembre-se de que a
.html()
função é apenas um invólucro.innerHTML
, mas na.text()
função o jQuery adiciona um "filtro de entidade" e esse filtro naturalmente consome tempo.Ok, se você realmente deseja desempenho ... Use Javascript puro para acessar a substituição direta de texto pela
nodeValue
propriedade Conclusões de referência:.html()
é ~ 2x mais rápido que.text()
..innerHTML
é ~ 3x mais rápido que.html()
..nodeValue
é ~ 50x mais rápido que.html()
, ~ 100x que.text()
e ~ 20x que.innerHTML
.PS: a
.textContent
propriedade foi introduzida com o DOM-Level-3,.nodeValue
é DOM-Level-2 e é mais rápida (!).Veja esta referência completa :
fonte
nodeValue
a propriedade, ele transforma ">" em "& lt;", etc..text()
parece ~ 7x mais rápido que.html()
). Código fonte: codepen.io/damhonglinh/pen/vGpQEO . Eu testei com 1500 elementos;.html()
levou ~ 220ms e.text()
levou ~ 30ms.O primeiro exemplo, na verdade, incorporará o HTML ao
div
passo que o segundo exemplo escapará do texto, substituindo os caracteres relacionados aos elementos pelas respectivas entidades de caracteres correspondentes , para que sejam exibidos literalmente (ou seja, o HTML será exibido sem renderização).fonte
.text()
função, tudo<
será substituído por<
. Portanto, com.html()
o navegador, você verá um link e algum texto em negrito, com.text()
o navegador verá tudo como texto e não criará um link ou texto em negrito.A
text()
entidade de método escapa qualquer HTML que é passado para ela. Usetext()
quando desejar inserir código HTML que ficará visível para as pessoas que visualizarem a página.Tecnicamente, seu segundo exemplo produz:
que seria renderizado no navegador como:
Seu primeiro exemplo será renderizado como um link real e em texto em negrito.
fonte
Na verdade, ambos parecem um pouco semelhantes, mas são bem diferentes, depende do seu uso ou intenção do que você deseja alcançar,
Onde usar:
.html()
para operar em contêineres com elementos html..text()
para modificar o texto dos elementos que geralmente possuem tags de abertura e fechamento separadasOnde não usar:
.text()
O método não pode ser usado em entradas ou scripts de formulário..val()
para elementos de entrada ou área de texto..html()
para o valor de um elemento de script.A coleta de conteúdo html
.text()
converterá as tags html em entidades html.Diferença:
.text()
pode ser usado em documentos XML e HTML..html()
é apenas para documentos html.Verifique este exemplo no jsfiddle para ver as diferenças de ação
Exemplo
fonte
Estranho que ninguém mencione o benefício de prevenção de script entre sites de
.text()
mais.html()
(embora outros tenham acabado de mencionar que.text()
escapa aos dados).É sempre recomendável usar
.text()
quando você deseja atualizar dados no DOM, que são apenas dados / texto para o usuário ver..html()
deve ser usado principalmente para obter o conteúdo HTML dentro de uma div.fonte
Use .text (…) quando pretender exibir o valor como um texto simples.
Use .html (…) quando pretender exibir o valor como um texto formatado em html (ou conteúdo HTML).
Você definitivamente deve usar .text (...) quando não tiver certeza de que seu texto (por exemplo, proveniente de um controle de entrada) não contém caracteres / tags com significado especial em HTML. Isso é realmente importante, pois isso pode resultar na exibição incorreta do texto, mas também pode causar a ativação de um snippet de script JS indesejado (por exemplo, proveniente de outra entrada do usuário) .
fonte
Basicamente, $ ("# div"). Html usa element.innerHTML para definir o conteúdo e $ ("# div"). Text (provavelmente) usa element.textContent.
http://docs.jquery.com/Attributes/html :
http://docs.jquery.com/Attributes/text :
fonte
$ ('. div'). html (val) definirá os valores HTML de todos os elementos selecionados, $ ('. div'). text (val) definirá os valores de texto de todos os elementos selecionados.
Documentos da API para jQuery.text ()
Documentos da API para jQuery.html ()
Eu acho que eles correspondem ao Nó # textContent e ao Element # innerHTML , respectivamente. (Referências DOM do Gecko).
fonte
Bem, em termos simples.
html () - para obter html interno (tags e texto html).
text () - para obter apenas texto se presente (apenas texto)
fonte
O diferente é
.html()
avaliado como um html,.text()
avaliado como um texto.Considere um bloco de HTML
HTML
JS
A ilustração é deste link http://api.jquery.com/text/
fonte
.text()
fornecerá o texto real entre as tags HTML. Por exemplo, o texto do parágrafo entre asp
tags. O que é interessante notar é que ele fornecerá todo o texto do elemento que você está alvejando com o$
seletor, além de todo o texto nos elementos filhos desse elemento selecionado. Portanto, se você tiver váriasp
tags com texto dentro do elemento body e fizer a$(body).text()
, receberá todo o texto de todos os parágrafos. (Somente texto, não asp
próprias tags.).html()
fornecerá o texto e as tags. Então$(body).html()
, basicamente, você fornece toda a sua página HTML.val()
funciona para elementos que possuem umvalue
atributo, comoinput
. Uminput
não tem texto contido ou HTML e, portanto,.text()
e.html()
serão ambosnull
parainput
elementos.fonte
Eu acho que a diferença é inserir tag html na
text()
sua tag html não funcionaresultado :
substituindo
text()
porhtml()
resultado
então a tag
<br>
funciona emhtml()
fonte
text()
.a função de texto define ou recupera o valor como texto sem formatação; caso contrário, a função HTML define ou recupera o valor como tags HTML para alterar ou modificar isso. Se você quiser apenas alterar o conteúdo, use texto (). Mas se você precisar alterar a marcação, use hmtl ().
É uma resposta idiota para mim depois de seis anos, não se importe.
fonte