nodeValue vs innerHTML e textContent. Como escolher?

estou a usar js simples para alterar o texto interno de um elemento do rótulo, e não tinha a certeza com que fundamentos deveria usar innerHTML ou nodeValue ou textContent. Eu não preciso criar um novo nó ou alterar os elementos HTML ou qualquer coisa - basta substituir o texto. Aqui está um exemplo do Código:

var myLabel = document.getElementById("#someLabel");
myLabel.innerHTML = "Some new label text!"; // this works

myLabel.firstChild.nodeValue = "Some new label text!"; // this also works.

myLabel.textContent = "Some new label text!"; // this also works.
Vi a fonte jQuery, e ela usa nodeValue exatamente uma vez, mas innerHTML e textContent várias vezes. Então encontrei este teste jsperf que indica o primeira criança.nodeValue é significativamente mais rápido. Pelo menos é o que eu interpretei como significando.

Se for o primeiro filho.o nodeValue é muito mais rápido, Qual é a contrapartida? Não é amplamente apoiado? Há mais algum problema?

Author: hippietrail, 2014-01-23

4 answers

Diferenças entre textContent/innerText / innerHTML no MDN.

E uma resposta de Stackoverflow sobre innerText/nodeValue.

Resumo

  1. nodeValue é um pouco mais confuso de usar, mas mais rápido do que innerHTML.
  2. innerHTML analisa o conteúdo como HTML e leva mais tempo.
  3. textContent usa texto direito, não processa HTML, e é mais rápido.
  4. texto inerte Leva styles em consideração. Não vai receber texto escondido, por exemplo.

innerText não existia no firefox até FireFox 45 De acordo com caniuse mas agora é suportado em todos os navegadores principais.

 108
Author: peterfoldi, 2017-05-23 12:26:15

.textContent saídas text/plain enquanto .innerHTML saídas text/html.

Exemplo rápido:

var example = document.getElementById('exampleId');

example.textContent = '<a href="https://google.com">google</a>';

Saída: google

example.innerHTML = '<a href="https://google.com">google</a>';

Resultado: google

Você pode ver a partir do primeiro exemplo que o resultado do tipo text/plain não é processado pelo navegador e resulta na apresentação completa do conteúdo. O resultado do tipo text/html diz ao navegador para o analisar antes de o mostrar.

MDN innerHTML, conteúdo do MDN, MDN nodeValue

 43
Author: Brian, 2018-03-02 16:16:46

Os dois que conheço bem e com quem trabalho são innerHTML e conteúdo de texto .

Eu uso o conteúdo do texto Quando só quero alterar o texto de um parágrafo ou título assim:

var heading = document.getElementById('heading')
var paragraph = document.getElementById('paragraph')

setTimeout(function () {
  heading.textContent = 'My New Title!'
  paragraph.textContent = 'My second <em>six word</em> story.'
}, 2000)
em { font-style: italic; }
<h1 id="heading">My Title</h1>
<p id="paragraph">My six word story right here.</p>

Assim, textContent {[9] } apenas muda o texto, mas ele não processa HTML, como podemos dizer a partir das marcas visíveis em texto simples no resultado lá.

Se queremos processar HTML, usamos innerHTML como isto:

var heading = document.getElementById('heading')
var paragraph = document.getElementById('paragraph')

setTimeout(function () {
  heading.innerHTML = 'My <em>New</em> Title!'
  paragraph.innerHTML = 'My second <em>six word</em> story.'
}, 2000)
em { font-style: italic; }
<h1 id="heading">My Title</h1>
<p id="paragraph">My six word story right here.</p>

Então, esse segundo exemplo analisa a cadeia que atribuo à propriedade do elemento DOM innerHTML como HTML.

Isto é incrível e uma grande vulnerabilidade de segurança.

(procure XSS se quiser saber sobre segurança para isto)

 5
Author: Costa, 2017-04-19 18:42:51

InnerText é mais ou menos o que receberia se seleccionasse o texto e o copiasse. Elementos que não são renderizados não estão presentes no texto interno.

TextContent é uma concatenação dos valores de all TextNodes na sub-árvore. Seja renderizado ou não.

Aqui está um Grande post detalhando as diferenças

InnerHTML não deve ser incluído numa comparação com o texto inerte ou o conteúdo de texto, Uma vez que é totalmente difreente., e você deve realmente saber por que:-) procure separadamente

 2
Author: Drenai, 2018-01-24 16:47:27