在JavaScript中textContent和innerText之间的区别是什么?
我可以使用textContent如下:
var logo$ = document.getElementsByClassName('logo')[0];
logo$.textContent = "Example";
在JavaScript中textContent和innerText之间的区别是什么?
我可以使用textContent如下:
var logo$ = document.getElementsByClassName('logo')[0];
logo$.textContent = "Example";
当前回答
除了其他答案中提到的所有差异之外,还有一个是我最近才发现的:
尽管innerText属性据说自2016年以来已经标准化,但它在浏览器之间表现出差异:Mozilla忽略了innerText中的U+200E和U+200F字符(“lrm”和“rlm”),而Chrome则不会。
console.log (. getelementbyid(“测试”).textContent.length); console.log (. getelementbyid(“测试”).innerText.length); < div id = "测试" > [& # x200E;] < / div >
Firefox报告3和2,Chrome报告3和3。
还不确定这是否是一个bug(如果是的话,在哪个浏览器中),或者只是我们不得不忍受的那些古怪的不兼容之一。
其他回答
textContent返回全文,不关心可见性,而innerText则关心。
<p id="source">
<style>#source { color: red; }</style>
Text with breaking<br>point.
<span style="display:none">HIDDEN TEXT</span>
</p>
textContent的输出:
#source { color: red; } Text with breakingpoint. HIDDEN TEXT
innerText的输出(注意innerText是如何意识到像<br>这样的标签,并忽略隐藏元素):
Text with breaking point.
大多数浏览器都支持textContent。ie8或更早版本不支持,但可以使用polyfill
textContent属性设置或返回指定节点及其所有子节点的文本内容。
参见http://www.w3schools.com/jsref/prop_node_textcontent.asp
对于那些在谷歌上搜索这个问题并来到这里的人。我觉得这个问题最明确的答案在MDN文档中:https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent。
你可以忘记所有让你困惑的要点,但要记住两件事:
当您试图更改文本时,textContent通常是您正在寻找的属性。 当您试图从某个元素中获取文本时,innerText近似于用户使用光标高亮显示元素内容并将其复制到剪贴板中所获得的文本。textContent提供了所有可见或隐藏的内容,包括<script>和<style>元素。
除了其他答案中提到的所有差异之外,还有一个是我最近才发现的:
尽管innerText属性据说自2016年以来已经标准化,但它在浏览器之间表现出差异:Mozilla忽略了innerText中的U+200E和U+200F字符(“lrm”和“rlm”),而Chrome则不会。
console.log (. getelementbyid(“测试”).textContent.length); console.log (. getelementbyid(“测试”).innerText.length); < div id = "测试" > [& # x200E;] < / div >
Firefox报告3和2,Chrome报告3和3。
还不确定这是否是一个bug(如果是的话,在哪个浏览器中),或者只是我们不得不忍受的那些古怪的不兼容之一。
innerHTML甚至会执行HTML标签,这可能会导致任何类型的客户端注入攻击,如基于DOM的XSS。 下面是代码片段:
<!DOCTYPE html>
<html>
<body>
<script>
var source = "Hello " + decodeURIComponent("<h1>Text inside gets executed as h1 tag HTML is evaluated</h1>"); //Source
var divElement = document.createElement("div");
divElement.innerHTML = source; //Sink
document.body.appendChild(divElement);
</script>
</body>
</html>
如果使用. textcontent,它将不会计算HTML标记并将其打印为String。
<!DOCTYPE html>
<html>
<body>
<script>
var source = "Hello " + decodeURIComponent("<h1>Text inside will not get executed as HTML</h1>"); //Source
var divElement = document.createElement("div");
divElement.textContent = source; //Sink
document.body.appendChild(divElement);
</script>
</body>
</html>
参考:https://www.scip.ch/en/?labs.20171214