JavaScript innerText
最后修改于 2025 年 4 月 2 日
在本文中,我们将探讨 JavaScript 中的 innerText 属性。此属性对于处理 DOM 元素的文本内容至关重要,它提供了一种获取或设置人类可读文本的简单方法。
基本定义
innerText 属性表示节点及其后代的可渲染文本内容。它只返回可见文本,忽略隐藏的元素,并保留空格和换行符。
与 textContent 不同,innerText 了解样式和 CSS。它不会返回隐藏元素的文本,并且会尊重视觉布局,包括由 CSS 引起的换行符。
innerText 的基本用法
本示例演示了如何使用 innerText 获取和设置文本内容。
<!DOCTYPE html>
<html>
<head>
<title>Basic innerText</title>
</head>
<body>
<div id="content">Hello <span>World</span>!</div>
<button onclick="showText()">Show Text</button>
<script>
function showText() {
const element = document.getElementById('content');
alert(element.innerText);
}
</script>
</body>
</html>
在这个基本示例中,我们有一个包含文本和一个 span 的 div 元素。当单击按钮时,showText 函数会检索该元素并使用 innerText 显示其文本内容。
警报将显示“Hello World!”因为 innerText 结合了所有可见的文本内容,包括子元素内的文本。它保留了单词之间的空格,但忽略了 HTML 标签。
innerText 与 textContent 的区别
本示例演示了 innerText 和 textContent 之间的区别。
<!DOCTYPE html>
<html>
<head>
<title>innerText vs textContent</title>
<style>
.hidden { display: none; }
</style>
</head>
<body>
<div id="example">
Visible text
<span class="hidden">Hidden text</span>
<div>More text</div>
</div>
<script>
const element = document.getElementById('example');
console.log('innerText:', element.innerText);
console.log('textContent:', element.textContent);
</script>
</body>
</html>
本示例显示了一个带有可见和隐藏文本内容的 div。JavaScript 会记录 innerText 和 textContent 的值。
innerText 只会返回“Visible text More text”,而 textContent 会包含隐藏文本。此外,innerText 的性能负担较重,因为它需要布局信息。
使用 innerText 设置文本
本示例演示了如何使用 innerText 设置文本内容。
<!DOCTYPE html>
<html>
<head>
<title>Setting Text</title>
</head>
<body>
<div id="output">Original content</div>
<button onclick="updateText()">Update Text</button>
<script>
function updateText() {
const output = document.getElementById('output');
output.innerText = 'New content with\nline breaks';
}
</script>
</body>
</html>
这里我们有一个 div 元素和一个按钮。单击时,按钮会使用带有换行符的字符串使用 innerText 更新 div 的内容。
字符串中的换行符将呈现为 HTML 中的实际换行符,因为 innerText 在设置内容时会保留空格和换行符。这与 HTML 解析行为不同。
带格式内容的 innerText
本示例演示了 innerText 如何处理格式化内容。
<!DOCTYPE html>
<html>
<head>
<title>Formatted Content</title>
</head>
<body>
<div id="formatted" style="white-space: pre-wrap;">
This text has extra spaces
And multiple
lines
</div>
<button onclick="showFormattedText()">Show Text</button>
<script>
function showFormattedText() {
const element = document.getElementById('formatted');
alert(element.innerText);
}
</script>
</body>
</html>
本示例显示了一个带有额外空格和换行符的 div,并使用 white-space: pre-wrap 进行样式设置。按钮使用 innerText 显示文本。
警报将显示文本的渲染方式完全相同,保留了空格和换行符。这表明 innerText 如何尊重文本的视觉呈现,包括影响文本布局的 CSS 样式。
安全注意事项
本示例说明了为什么 innerText 比 innerHTML 对用户内容更安全。
<!DOCTYPE html>
<html>
<head>
<title>Security Example</title>
</head>
<body>
<div id="safeOutput"></div>
<div id="unsafeOutput"></div>
<button onclick="testSecurity()">Test Security</button>
<script>
function testSecurity() {
const userInput = '<script>alert("XSS")</script>';
document.getElementById('safeOutput').innerText = userInput;
document.getElementById('unsafeOutput').innerHTML = userInput;
}
</script>
</body>
</html>
本示例在处理潜在的恶意用户输入时比较了 innerText 和 innerHTML。按钮会触发这两种方法。
innerText 版本会将 script 标签显示为文本,从而防止 XSS 攻击。innerHTML 版本会尝试执行脚本。这表明了为什么 innerText 对用户生成的内容更安全。
来源
在本文中,我们展示了如何在 JavaScript 中使用 innerText 属性。此属性对于在 Web 开发中安全地处理文本内容至关重要。
作者
列出 所有 JS DOM 教程。