ZetCode

JavaScript outerHTML

最后修改于 2025 年 4 月 2 日

在本文中,我们将探讨 JavaScript 中的 outerHTML 属性。此属性对于 DOM 操作至关重要,它允许开发人员访问和修改元素的完整 HTML 表示。

基本定义

outerHTML 属性会获取描述该元素(包括其后代)的序列化 HTML 片段。它还可以设置为用从给定字符串解析的节点替换该元素。

与仅包含元素内容的 innerHTML 不同,outerHTML 包括元素本身及其所有属性。设置 outerHTML 会替换 DOM 中的整个元素。

基本 outerHTML 示例

此示例演示了如何读取简单 div 元素的 outerHTML。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Basic outerHTML</title>
</head>
<body>

<div id="content" class="box">Hello there!</div>

<script>
    const element = document.getElementById('content');
    console.log(element.outerHTML);
</script>

</body>
</html>

在这个基本示例中,我们有一个 ID 为“content”且类名为“box”的 div 元素。JavaScript 代码检索此元素并将其 outerHTML 记录到控制台。

输出将显示元素的完整 HTML 表示,包括其属性和内容。这演示了 outerHTML 如何提供元素的完整 HTML 结构。

使用 outerHTML 替换元素

此示例展示了如何通过设置其 outerHTML 来完全替换元素。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Replacing Elements</title>
</head>
<body>

<div id="replaceMe">This will be replaced</div>
<button onclick="replaceElement()">Replace</button>

<script>
    function replaceElement() {
        const element = document.getElementById('replaceMe');
        element.outerHTML = '<p class="new">New content here!</p>';
    }
</script>

</body>
</html>

这里我们有一个 div 元素和一个按钮。当单击按钮时,replaceElement 函数通过设置其 outerHTML 属性,用新的 p 元素替换整个 div。

这演示了 outerHTML 如何用于在 DOM 中完全替换元素。原始元素被移除,并被解析的 HTML 替换。

比较 innerHTML 和 outerHTML

此示例突出了 innerHTML 和 outerHTML 之间的区别。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>innerHTML vs outerHTML</title>
</head>
<body>

<div id="compare" class="container">
    <span>Sample text</span>
</div>

<script>
    const element = document.getElementById('compare');
    console.log('innerHTML:', element.innerHTML);
    console.log('outerHTML:', element.outerHTML);
</script>

</body>
</html>

在此示例中,我们将同一个元素的 innerHTML 和 outerHTML 都记录到控制台。输出清楚地显示了这些属性之间的区别。

innerHTML 仅显示元素(span)内的内容,而 outerHTML 显示包括其 class 属性和所有内容的完整元素。

使用 outerHTML 克隆元素

此示例演示了如何使用 outerHTML 克隆元素。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Cloning Elements</title>
</head>
<body>

<div id="original" class="box" data-info="important">Original content</div>
<div id="cloneContainer"></div>
<button onclick="cloneElement()">Clone</button>

<script>
    function cloneElement() {
        const original = document.getElementById('original');
        const container = document.getElementById('cloneContainer');
        container.innerHTML = original.outerHTML;
    }
</script>

</body>
</html>

这里我们有一个具有多个属性的原始 div 和一个容器 div。当单击按钮时,通过使用其 outerHTML 克隆原始元素。

此技术创建了原始元素的精确副本,包括其所有属性和内容。克隆体被插入到容器 div 中。

outerHTML 的安全注意事项

此示例演示了使用 outerHTML 时的安全注意事项。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Security Considerations</title>
</head>
<body>

<div id="userContent">Safe content</div>
<button onclick="injectContent()">Inject</button>

<script>
    function injectContent() {
        // Simulating untrusted user input
        const userInput = '<img src="x" onerror="alert(\'XSS\')">';
        const element = document.getElementById('userContent');
        
        // UNSAFE: Directly setting outerHTML with untrusted input
        // element.outerHTML = userInput;
        
        // SAFER: Using textContent for plain text
        element.textContent = userInput;
    }
</script>

</body>
</html>

此示例显示了使用不受信任的输入设置 outerHTML 的潜在危险。注释掉的不安全代码将执行任意 JavaScript。

在处理用户提供的内容时,使用 textContent 或在使用 outerHTML 之前正确清理输入更安全,以防止 XSS 攻击。

来源

MDN outerHTML 文档

在本文中,我们展示了如何在 JavaScript 中使用 outerHTML 属性。这个强大的属性允许对 DOM 中的 HTML 元素进行完全访问和修改。

作者

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

列出 所有 JS DOM 教程