innerText vs innerHtml vs label vs text vs textContent vs outerText
我有一个由Javascript填充的下拉列表。
当决定什么应该是默认值显示在负载,我意识到,以下属性显示完全相同的值:
innerText
-
innerHtml
-
label
-
text
-
textContent
-
outerText
我自己的研究显示了基准testing或几个之间的比较,但不是全部。
我可以使用自己的常识,select1或者其他,因为它们提供了相同的结果,但是,我担心如果数据发生变化,这不会是一个好主意。
我的发现是:
-
innerText
将按原样显示值,并忽略可能包含的任何HTML格式 -
innerHTML
将显示值并应用任何HTML格式 -
label
看起来像innerText
,我看不出有什么不同 -
text
看起来和innerText
相同,但jQuery的简写版本 -
textContent
看起来与innerText
相同,但保持格式化(如\n
) -
outerText
看起来与innerText
相同
我的研究只能使我能够testing我能想到的东西,或者阅读发表的内容,但是如果我的研究是正确的,并且label
和outerText
有什么特别的地方的话,我们的研究能够证实吗?
来自MDN :
Internet Explorer引入了element.innerText。 其意图与textContent几乎相同,但有一些不同之处:
请注意,虽然textContent获取所有元素(包括
<script>
和<style>
元素)的内容,但大部分等效的IE特定属性innerText不包含。innerText也知道样式,不会返回隐藏元素的文本,而textContent会。
由于innerText知道CSS样式,它将触发回stream,而textContent不会。
所以innerText
将不包含被CSS隐藏的文本,但是textContent
将会被隐藏。
innerHTML将按照名称的指示返回HTML。 通常,为了在元素中检索或写入文本,人们使用innerHTML。 应该使用textContent。 由于文本不被parsing为HTML,因此可能会有更好的性能。 而且,这避免了XSS攻击向量。
有这么多不同的属性的一个主要原因是,不同的浏览器本来有不同的名称为这些属性,并没有完整的跨浏览器支持所有这些。 如果您使用的是jQuery,那么应该坚持.text()
因为它旨在消除跨浏览器差异。
对于其他的一些: outerHTML
与innerHTML
基本相同,只是它包含了它所属元素的开始和结束标记。 我似乎无法find很多关于outerText
描述。 我认为这可能是一个不起眼的遗产,应该避免。
下拉列表包含一个Option
对象的集合,因此您应该使用.text
属性来检查元素的文本表示forms,即
<option value="123">text goes here</option> ^^^^^^^^^^^^^^
顺便说一句,
.text
似乎与.innerText
相同,但JQuery的简写版本
这是不正确的; $(element).text()
是jQuery版本,而element.text
是属性访问版本。
JLRishe另外优秀答案的补充:
innerText和outerText都存在的原因是为了与innerHTML和outerHTML对称。 当您分配给该属性时,这变得很重要。
假设你有一个HTML代码元素<b>Lorem Ipsum</b>
:
e.innerHTML = "<i>Hello</i> World!"; => <b><i>Hello</i> World!</b> e.outerHTML = "<i>Hello</i> World!"; => <i>Hello</i> World! e.innerText = "Hello World!"; => <b>Hello World!</b> e.outerText = "Hello World!"; => Hello World!
如果您针对特定的浏览器,请参阅浏览器兼容性http://www.quirksmode.org/dom/html/ 。 因为他们似乎都有自己的做事方式。 这就是为什么如果你不想摆弄,最好使用JQuery .text()( http://api.jquery.com/text/ )。
textContent
不会格式化(\ n)