ZetCode

JavaScript replaceChild

最后修改于 2025 年 4 月 2 日

在本文中,我们将探讨 JavaScript 中的 element.replaceChild 方法。此方法对于 DOM 操作至关重要,它允许开发人员替换父元素中的子元素。

基本定义

replaceChild 方法替换指定父节点中的一个子节点。它接受两个参数:要插入的新节点和要替换的旧节点。

该方法返回被替换的节点。如果新节点已存在于 DOM 中,它将被从当前位置移动到新位置。

基本的 replaceChild 示例

此示例演示了如何用新的段落元素替换一个简单的段落元素。

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

<div id="container">
    <p id="oldPara">This is the old paragraph.</p>
</div>

<button onclick="replaceElement()">Replace Paragraph</button>

<script>
    function replaceElement() {
        const container = document.getElementById('container');
        const oldPara = document.getElementById('oldPara');
        
        const newPara = document.createElement('p');
        newPara.textContent = 'This is the new paragraph!';
        
        container.replaceChild(newPara, oldPara);
    }
</script>

</body>
</html>

在这个基本示例中,我们有一个包含段落的 div。当点击按钮时,该函数会创建一个新的段落,并使用 replaceChild 替换旧段落。

该方法要求父元素(容器)来调用它,传递新节点和要替换的旧节点。旧节点将从 DOM 中移除。

用现有元素替换

此示例展示了如何用另一个现有元素替换一个元素。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Replace with Existing Element</title>
</head>
<body>

<div id="container">
    <p id="para1">First paragraph</p>
    <p id="para2">Second paragraph</p>
</div>

<button onclick="swapElements()">Swap Paragraphs</button>

<script>
    function swapElements() {
        const container = document.getElementById('container');
        const para1 = document.getElementById('para1');
        const para2 = document.getElementById('para2');
        
        // Create a temporary clone of para1
        const temp = para1.cloneNode(true);
        
        // Replace para1 with para2
        container.replaceChild(para2, para1);
        
        // Replace para2 with the original para1 (from temp)
        container.replaceChild(temp, para2);
    }
</script>

</body>
</html>

这里我们有一个容器内的两个段落。点击按钮会使用临时克隆的 replaceChild 来交换它们的位置。

这表明,当用现有元素进行替换时,原始元素是被移动而不是被复制。临时克隆有助于在交换过程中保留原始内容。

替换列表项

此示例演示了如何替换无序列表中的项。

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

<ul id="fruitList">
    <li id="apple">Apple</li>
    <li id="banana">Banana</li>
    <li id="cherry">Cherry</li>
</ul>

<button onclick="replaceFruit()">Replace Banana</button>

<script>
    function replaceFruit() {
        const list = document.getElementById('fruitList');
        const oldItem = document.getElementById('banana');
        
        const newItem = document.createElement('li');
        newItem.textContent = 'Blueberry';
        newItem.id = 'blueberry';
        
        list.replaceChild(newItem, oldItem);
    }
</script>

</body>
</html>

在此示例中,我们有一个水果列表。点击按钮会使用 replaceChild 将香蕉项替换为新的蓝莓项。

这表明 replaceChild 如何与列表结构一起使用,以动态更新内容,同时保持整体结构。

用事件监听器替换

此示例显示了如何在替换元素时保留事件监听器。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Replacing with Event Listeners</title>
</head>
<body>

<div id="container">
    <button id="oldBtn">Click Me</button>
</div>
<p id="message"></p>

<button onclick="replaceButton()">Replace Button</button>

<script>
    // Add event listener to original button
    document.getElementById('oldBtn').addEventListener('click', function() {
        document.getElementById('message').textContent = 'Old button clicked!';
    });

    function replaceButton() {
        const container = document.getElementById('container');
        const oldBtn = document.getElementById('oldBtn');
        
        // Create new button with same functionality
        const newBtn = document.createElement('button');
        newBtn.textContent = 'New Button';
        newBtn.id = 'newBtn';
        
        // Add event listener to new button
        newBtn.addEventListener('click', function() {
            document.getElementById('message').textContent = 'New button clicked!';
        });
        
        container.replaceChild(newBtn, oldBtn);
    }
</script>

</body>
</html>

这里我们有一个带有点击处理程序的按钮。替换按钮会创建一个具有类似功能的同名按钮,并使用 replaceChild 替换原始按钮。

这表明,在替换元素时,事件监听器不会自动转移。必须将新的监听器附加到替换元素上。

替换复杂元素

此示例显示了如何用更复杂的结构替换元素。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Replacing with Complex Elements</title>
    <style>
        .card {
            border: 1px solid #ccc;
            padding: 10px;
            margin: 10px;
            width: 200px;
        }
    </style>
</head>
<body>

<div id="content">
    <div id="simpleCard" class="card">
        Simple content card
    </div>
</div>

<button onclick="replaceWithComplex()">Replace with Complex Card</button>

<script>
    function replaceWithComplex() {
        const content = document.getElementById('content');
        const oldCard = document.getElementById('simpleCard');
        
        // Create complex card element
        const newCard = document.createElement('div');
        newCard.className = 'card';
        newCard.id = 'complexCard';
        
        // Add complex content
        newCard.innerHTML = `
            <h3>Complex Card</h3>
            <p>This card has multiple elements inside it.</p>
            <ul>
                <li>Item 1</li>
                <li>Item 2</li>
                <li>Item 3</li>
            </ul>
        `;
        
        content.replaceChild(newCard, oldCard);
    }
</script>

</body>
</html>

在此示例中,我们使用 replaceChild 将一个简单的卡片替换为一个更复杂的卡片,其中包含多个嵌套元素。

这表明 replaceChild 如何处理复杂的 DOM 结构,以及如何使用 innerHTML 快速创建嵌套元素以进行替换。

来源

MDN replaceChild 文档

在本文中,我们展示了如何在 JavaScript 中使用 element.replaceChild。此方法对于 Web 开发中的 DOM 操作和动态内容更新至关重要。

作者

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

列出 所有 JS DOM 教程