ZetCode

JavaScript textContent

最后修改于 2025 年 4 月 2 日

在本文中,我们将探讨 JavaScript 中的 textContent 属性。该属性对于处理 DOM 元素中的文本内容至关重要,它提供了一种安全高效的操作文本的方式。

基本定义

textContent 属性用于获取或设置节点及其所有后代元素的文本内容。与 innerHTML 不同,它不会解析 HTML 标签,因此对 XSS 攻击更安全。

在获取文本内容时,textContent 会返回元素内的所有文本,包括隐藏的元素。在设置文本内容时,任何现有内容都会被新文本完全替换。

基本 textContent 用法

此示例演示了如何使用 textContent 获取和设置文本内容。

index.html
<!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 之间的区别。

index.html
<!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>

在这里,我们比较了 textContentinnerHTML 处理内容的不同方式。textContent 返回所有文本,而 innerHTML 返回 HTML 标记。

当我们使用 textContent 设置内容时,HTML 标签被视为纯文本,不会被解析。这使得 textContent 对于用户输入更安全,因为它能防止 XSS 攻击。

带隐藏元素的 textContent

此示例演示了 textContent 如何处理隐藏的元素。

index.html
<!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 来清空元素内容。

index.html
<!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 的性能优势。

index.html
<!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>

此示例比较了在反复更新元素内容时 textContentinnerHTML 的性能。textContent 通常更快,因为它不解析 HTML。

当更新频繁或内容量较大时,性能差异会更加明显。对于简单的文本更新,应优先选择 textContent 以获得更好的性能。

来源

MDN textContent 文档

在本文中,我们探讨了 JavaScript 中的 textContent 属性。该属性对于 Web 开发中的安全高效的文本操作至关重要。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 JS DOM 教程