ZetCode

JavaScript insertBefore

最后修改于 2025 年 4 月 2 日

在本文中,我们将探讨 JavaScript 中的 element.insertBefore 方法。此方法对于 DOM 操作至关重要,它允许开发人员在 DOM 树内的特定位置插入元素。

基本定义

insertBefore 方法将一个节点作为指定父节点的子节点,插入到另一个参考节点之前。这是一个功能强大的方法,可用于精确的 DOM 操作和元素定位。

语法是:parentNode.insertBefore(newNode, referenceNode)。如果 referenceNode 为 null,则新节点将插入到父节点的子列表的末尾。

基本的 insertBefore 示例

此示例演示了如何在一个现有元素之前插入一个新元素。

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

<ul id="list">
    <li>First item</li>
    <li id="second">Second item</li>
    <li>Third item</li>
</ul>

<script>
    const list = document.getElementById('list');
    const secondItem = document.getElementById('second');
    const newItem = document.createElement('li');
    
    newItem.textContent = 'New item';
    list.insertBefore(newItem, secondItem);
</script>

</body>
</html>

在此示例中,我们创建一个新的列表项,并将其插入到列表的第二个项目之前。我们首先获取对父列表和参考节点的引用。

insertBefore 方法将我们的新元素精确地放置在我们想要的 DOM 层级位置。这展示了带有精确定位的基础 DOM 操作。

插入到第一个子节点之前

此示例显示了如何将一个元素插入到父节点的开头。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Insert Before First Child</title>
</head>
<body>

<div id="container">
    <p>Existing paragraph</p>
</div>

<script>
    const container = document.getElementById('container');
    const newHeading = document.createElement('h2');
    
    newHeading.textContent = 'New Heading';
    container.insertBefore(newHeading, container.firstChild);
</script>

</body>
</html>

在这里,我们将一个新标题插入到容器 div 的第一个子节点之前。我们使用 firstChild 属性来引用现有的段落。

当您需要将内容添加到元素的前面,同时保留其现有子节点时,此技术非常有用。firstChild 属性提供了对插入点的轻松访问。

插入到末尾

此示例演示了 referenceNode 为 null 时的插入情况。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Insert at End</title>
</head>
<body>

<div id="gallery">
    <img src="image1.jpg" alt="Image 1">
    <img src="image2.jpg" alt="Image 2">
</div>

<script>
    const gallery = document.getElementById('gallery');
    const newImage = document.createElement('img');
    
    newImage.src = 'image3.jpg';
    newImage.alt = 'Image 3';
    gallery.insertBefore(newImage, null);
</script>

</body>
</html>

当 referenceNode 为 null 时,insertBefore 的行为类似于 appendChild,将新节点添加到父节点的子列表的末尾。

当您希望确保行为一致时,此方法很有用,无论您是插入到特定节点之前还是列表的末尾。

移动现有元素

此示例显示了如何将现有元素移动到新位置。

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

<div id="list1">
    <p id="item1">Item 1</p>
    <p id="item2">Item 2</p>
</div>

<div id="list2">
    <p id="item3">Item 3</p>
</div>

<button onclick="moveItem()">Move Item</button>

<script>
    function moveItem() {
        const list1 = document.getElementById('list1');
        const list2 = document.getElementById('list2');
        const item1 = document.getElementById('item1');
        
        list2.insertBefore(item1, list2.firstChild);
    }
</script>

</body>
</html>

在此,我们在按钮被点击时将“Item 1”从“list1”移动到“list2”的开头。该元素会自动从其原始位置移除。

这表明 insertBefore 可以在不需要克隆的情况下移动现有节点。DOM 会自动处理重新定位。

动态列表重新排序

此示例展示了如何使用 insertBefore 重新排序列表项。

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

<ul id="todo-list">
    <li>Buy groceries</li>
    <li id="important">Finish project</li>
    <li>Call mom</li>
</ul>

<button onclick="prioritize()">Prioritize Important</button>

<script>
    function prioritize() {
        const list = document.getElementById('todo-list');
        const important = document.getElementById('important');
        
        list.insertBefore(important, list.firstChild);
    }
</script>

</body>
</html>

此示例在按钮被点击时将重要任务移动到待办事项列表的顶部。我们同时获取了对列表和重要任务的引用。

insertBefore 方法非常适合动态列表重新排序场景。它提供了对 DOM 中元素定位的精确控制。

来源

MDN insertBefore 文档

在本文中,我们展示了如何在 JavaScript 中使用 element.insertBefore。此方法对于 Web 开发中精确的 DOM 操作和元素定位至关重要。

作者

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

列出 所有 JS DOM 教程