ZetCode

JavaScript element.prepend()

最后修改于 2025 年 4 月 2 日

在本文中,我们将探讨 JavaScript 中的 element.prepend() 方法。此方法对于 DOM 操作至关重要,它允许开发人员在父元素的子列表的开头插入节点。

基本定义

element.prepend() 方法在元素的第一个子节点之前插入一组 Node 对象或 DOMString 对象。它通过在所选元素的开头添加内容来修改 DOM。

与在末尾添加内容的 append() 不同,prepend() 在开头添加内容。它可以接受多个参数,并自动将字符串转换为 Text 节点。

基本的 prepend() 用法

此示例演示了如何将简单的文本节点预置到元素中。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Basic prepend()</title>
</head>
<body>

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

<script>
    const container = document.getElementById('container');
    container.prepend('Prepended text ');
</script>

</body>
</html>

在这个基本示例中,我们有一个带有现有段落的 div。JavaScript 代码在段落前预置了一个文本字符串。该字符串会自动转换为 Text 节点。

这演示了 prepend() 将内容添加到元素开头的基本用法。该方法在要插入内容的父元素上调用。

预置多个元素

此示例展示了如何一次使用 prepend() 预置多个元素。

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

<ul id="list">
    <li>Original item</li>
</ul>

<script>
    const list = document.getElementById('list');
    const newItem1 = document.createElement('li');
    newItem1.textContent = 'First new item';
    
    const newItem2 = document.createElement('li');
    newItem2.textContent = 'Second new item';
    
    list.prepend(newItem1, newItem2);
</script>

</body>
</html>

这里我们有一个包含一个 li 项的 ul 元素。我们创建了两个新的 li 元素并将它们都一次性预置。元素按传递的顺序出现。

这演示了 prepend() 如何接受多个参数。该方法在父元素的任何现有子节点之前按顺序插入它们。

混合字符串和元素预置

此示例演示了在使用 prepend() 时混合字符串和元素。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Mixed prepend</title>
</head>
<body>

<div id="content">
    <p>Original content</p>
</div>

<script>
    const content = document.getElementById('content');
    const heading = document.createElement('h2');
    heading.textContent = 'New Heading';
    
    content.prepend('Text before heading ', heading, ' Text after heading');
</script>

</body>
</html>

在此示例中,我们预置了文本字符串和元素的组合。字符串被转换为 Text 节点,并与标题元素一起插入。

这展示了 prepend() 在处理不同类型内容方面的灵活性。该方法在 DOM 中保持参数的顺序。

响应事件进行预置

此示例展示了如何在事件处理程序中使用 prepend()。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Event-driven prepend</title>
</head>
<body>

<div id="log"></div>
<button id="addBtn">Add Log Entry</button>

<script>
    const log = document.getElementById('log');
    const btn = document.getElementById('addBtn');
    
    btn.addEventListener('click', () => {
        const entry = document.createElement('div');
        entry.textContent = `Log entry at ${new Date().toLocaleTimeString()}`;
        log.prepend(entry);
    });
</script>

</body>
</html>

这里我们有一个日志容器和一个按钮。每次点击按钮都会预置带有时间戳的新日志条目。这会创建按时间倒序排列的日志,最新的条目在前。

这演示了 prepend() 的一个实际用例,您希望保持时间倒序。该方法非常适合此类场景。

使用 DocumentFragment 进行预置

此示例演示了如何使用 DocumentFragment 和 prepend() 来提高性能。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Prepend with DocumentFragment</title>
</head>
<body>

<div id="container">
    <p>Original content</p>
</div>

<script>
    const container = document.getElementById('container');
    const fragment = document.createDocumentFragment();
    
    const heading = document.createElement('h1');
    heading.textContent = 'Main Title';
    fragment.appendChild(heading);
    
    const subheading = document.createElement('h2');
    subheading.textContent = 'Subtitle';
    fragment.appendChild(subheading);
    
    container.prepend(fragment);
</script>

</body>
</html>

在此示例中,我们创建一个 DocumentFragment 来在一次性预置它们之前保存多个元素。这比多次 DOM 操作更有效。

DocumentFragment 是一个轻量级容器,在将内容添加到 DOM 之前不会触发重排。这使其成为批量操作的理想选择。

来源

MDN Element.prepend() 文档

在本文中,我们展示了如何在 JavaScript 中使用 element.prepend()。此方法对于 DOM 操作和在父元素开头插入元素非常强大。

作者

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

列出 所有 JS DOM 教程