JavaScript textContent
最后修改于 2025 年 4 月 2 日
在本文中,我们将探讨 JavaScript 中的 textContent
属性。该属性对于处理 DOM 元素中的文本内容至关重要,它提供了一种安全高效的操作文本的方式。
基本定义
textContent
属性用于获取或设置节点及其所有后代元素的文本内容。与 innerHTML
不同,它不会解析 HTML 标签,因此对 XSS 攻击更安全。
在获取文本内容时,textContent
会返回元素内的所有文本,包括隐藏的元素。在设置文本内容时,任何现有内容都会被新文本完全替换。
基本 textContent 用法
此示例演示了如何使用 textContent 获取和设置文本内容。
<!DOCTYPE html> <html> <head> <title>Basic textContent</title> </head> <body> <div id="demo">Initial text content</div> <script> const element = document.getElementById('demo'); console.log(element.textContent); // "Initial text content" element.textContent = 'Updated text content'; console.log(element.textContent); // "Updated text content" </script> </body> </html>
在这个基本示例中,我们首先获取一个 div 元素的文本内容并将其记录到控制台。然后我们更新文本内容并记录新值。
这展示了 textContent
在读取和写入文本内容方面的基本用法。该属性可与任何可以包含文本的 HTML 元素配合使用。
textContent 与 innerHTML 对比
此示例展示了 textContent 和 innerHTML 之间的区别。
<!DOCTYPE html> <html> <head> <title>textContent vs innerHTML</title> </head> <body> <div id="container"> <p>Some text <span>with nested elements</span></p> </div> <script> const container = document.getElementById('container'); console.log('textContent:', container.textContent); console.log('innerHTML:', container.innerHTML); container.textContent = '<strong>New text</strong>'; console.log('After textContent:', container.innerHTML); </script> </body> </html>
在这里,我们比较了 textContent
和 innerHTML
处理内容的不同方式。textContent
返回所有文本,而 innerHTML
返回 HTML 标记。
当我们使用 textContent
设置内容时,HTML 标签被视为纯文本,不会被解析。这使得 textContent
对于用户输入更安全,因为它能防止 XSS 攻击。
带隐藏元素的 textContent
此示例演示了 textContent 如何处理隐藏的元素。
<!DOCTYPE html> <html> <head> <title>textContent with Hidden Elements</title> <style> .hidden { display: none; } </style> </head> <body> <div id="content"> Visible text <span class="hidden">Hidden text</span> </div> <script> const content = document.getElementById('content'); console.log(content.textContent); // "Visible text Hidden text" </script> </body> </html>
在此示例中,我们有一个包含可见和隐藏文本的 div。textContent
会检索所有文本内容,而不管其可见性如何。
此行为与 innerText
不同,后者仅返回可见文本。textContent
更一致,因为它始终返回 DOM 树中的所有文本内容。
清空元素内容
此示例展示了如何使用 textContent 来清空元素内容。
<!DOCTYPE html> <html> <head> <title>Clearing Content</title> </head> <body> <div id="list"> <ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> </ul> </div> <button onclick="clearContent()">Clear Content</button> <script> function clearContent() { const list = document.getElementById('list'); list.textContent = ''; } </script> </body> </html>
这里我们有一个项目列表和一个按钮。点击时,按钮使用 textContent
清空列表容器内的所有内容。
将 textContent
设置为空字符串是删除元素所有子节点的一种有效方法。它比单独删除节点更快,并且比使用空字符串的 innerHTML
更安全。
性能注意事项
此示例演示了 textContent 的性能优势。
<!DOCTYPE html> <html> <head> <title>Performance Test</title> </head> <body> <div id="test">Initial content</div> <button onclick="runTest()">Run Performance Test</button> <div id="results"></div> <script> function runTest() { const element = document.getElementById('test'); const results = document.getElementById('results'); const iterations = 10000; // Test textContent let start = performance.now(); for (let i = 0; i < iterations; i++) { element.textContent = 'textContent ' + i; } let textContentTime = performance.now() - start; // Test innerHTML start = performance.now(); for (let i = 0; i < iterations; i++) { element.innerHTML = 'innerHTML ' + i; } let innerHTMLTime = performance.now() - start; results.innerHTML = ` <p>textContent: ${textContentTime.toFixed(2)}ms</p> <p>innerHTML: ${innerHTMLTime.toFixed(2)}ms</p> `; } </script> </body> </html>
此示例比较了在反复更新元素内容时 textContent
与 innerHTML
的性能。textContent
通常更快,因为它不解析 HTML。
当更新频繁或内容量较大时,性能差异会更加明显。对于简单的文本更新,应优先选择 textContent
以获得更好的性能。
来源
在本文中,我们探讨了 JavaScript 中的 textContent
属性。该属性对于 Web 开发中的安全高效的文本操作至关重要。
作者
列出 所有 JS DOM 教程。