nodeValue与innerHTML和textContent。 如何select?

我使用普通的js来改变标签元素的内部文本,我不确定我应该使用innerHTML还是nodeValue或textContent。 我不需要创build新节点或更改HTML元素或任何东西 – 只需replace文本。 这是一个代码示例:

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. 

我查看了jQuery源代码,它使用了nodeValue一次,但innerHTML和textContent几次。 然后我发现这个jsperftesting,指示firstChild.nodeValue显着更快。 至less这就是我所理解的意思。

如果firstChild.nodeValue更快,那有什么用呢? 这是不是广泛支持? 还有其他的问题吗?

MDN上的textContent / innerText / innerHTML之间的区别。

关于innerText / nodeValue的Stackoverflow答案。

概要

  1. nodeValue使用起来有点混乱,但比innerHTML快。
  2. innerHTML将内容parsing为HTML并需要更长的时间。
  3. textContent使用直接文本,不parsingHTML,速度更快。
  4. innerText考虑到风格。 它不会得到隐藏的文字。

根据caniuse, FireFox 45之前,firefox中并没有存在innerText ,但是现在在所有主stream浏览器中都支持它。

.textContent输出text/plain.innerHTML输出text/html

快速示例:

var example = document.getElementById('exampleId')

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

输出:<a href =“http://google.com”>; google </ a>(不含空格)

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

输出: 谷歌

您可以从第一个示例中看到, text/plaintypes的输出未被浏览器parsing,并导致显示完整的内容。 typestext/html输出告诉浏览器在显示之前parsing它。

MDN innerHTML , MDN textContent , MDN nodeValue

我熟知的两个方面是innerHTML和textContent

我使用textContent,当我只是想改变一个段落或标题的文本,如:

 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>