ZetCode

JavaScript previousElementSibling

最后修改于 2025 年 4 月 2 日

在本文中,我们将探讨 JavaScript 中的 previousElementSibling 属性。此属性对于 DOM 遍历至关重要,它允许开发人员访问 DOM 树中的上一个同级元素。

基本定义

previousElementSibling 属性返回同一树级别上的上一个元素节点。它仅返回元素节点,忽略文本节点和注释。

此属性是只读的,属于 Element 接口。如果没有上一个元素同级节点,则返回 null。它可用于在不使用复杂选择器的情况下导航同级元素。

基础 previousElementSibling

此示例演示了如何访问元素的上一个同级节点。

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

<div id="first">First div</div>
<div id="second">Second div</div>

<script>
    const secondDiv = document.getElementById('second');
    const previousDiv = secondDiv.previousElementSibling;
    console.log(previousDiv.textContent); // Outputs: First div
</script>

</body>
</html>

在此基本示例中,我们有两个 div 元素。我们选择第二个 div 并使用 previousElementSibling 访问其上一个同级节点。

该属性返回第一个 div 元素,我们记录其文本内容。这显示了 previousElementSibling 在 DOM 导航同级元素中的基本用法。

更改上一个同级元素的样式

此示例显示了如何修改上一个同级元素的样式。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Changing Previous Sibling Style</title>
</head>
<body>

<p>First paragraph</p>
<p id="target">Second paragraph</p>
<button onclick="highlightPrevious()">Highlight Previous</button>

<script>
    function highlightPrevious() {
        const target = document.getElementById('target');
        const previous = target.previousElementSibling;
        previous.style.backgroundColor = 'yellow';
        previous.style.padding = '10px';
    }
</script>

</body>
</html>

这里我们有两个段落和一个按钮。单击按钮时,按钮会找到目标段落的上一个同级节点并更改其样式。

这表明 previousElementSibling 可用于响应用户操作动态修改相邻元素的外观。

列表项中的导航

此示例演示了在无序列表中使用 previousElementSibling。

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

<ul>
    <li>Item 1</li>
    <li id="second">Item 2</li>
    <li>Item 3</li>
</ul>
<button onclick="showPrevious()">Show Previous Item</button>

<script>
    function showPrevious() {
        const current = document.getElementById('second');
        const previous = current.previousElementSibling;
        alert('Previous item: ' + previous.textContent);
    }
</script>

</body>
</html>

在此示例中,我们有一个包含三个项目的列表。按钮触发一个函数,该函数查找中间列表项的上一个同级节点。

这表明 previousElementSibling 在遍历列表结构和访问 DOM 中的相邻项方面非常有用。

表单字段导航

此示例显示了如何使用 previousElementSibling 在表单字段之间导航。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Form Field Navigation</title>
</head>
<body>

<input type="text" placeholder="First name">
<input type="text" id="lastName" placeholder="Last name">
<button onclick="focusPrevious()">Focus Previous Field</button>

<script>
    function focusPrevious() {
        const lastNameField = document.getElementById('lastName');
        const previousField = lastNameField.previousElementSibling;
        previousField.focus();
    }
</script>

</body>
</html>

这里我们有两个输入字段和一个按钮。单击按钮时,按钮会将焦点移动到相对于姓名字段的上一个输入字段。

这演示了 previousElementSibling 在表单导航中的实际用例,可以实现直观的字段到字段移动。

检查上一个同级节点

此示例显示了如何检查一个元素是否有上一个同级节点。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Checking for Previous Sibling</title>
</head>
<body>

<div id="first">First element</div>
<div id="second">Second element</div>
<button onclick="checkSiblings()">Check Siblings</button>
<p id="result"></p>

<script>
    function checkSiblings() {
        const first = document.getElementById('first');
        const result = document.getElementById('result');
        
        if (first.previousElementSibling) {
            result.textContent = 'Has previous sibling';
        } else {
            result.textContent = 'No previous sibling';
        }
    }
</script>

</body>
</html>

在此示例中,我们检查第一个 div 元素是否有上一个同级节点。结果显示在一个段落元素中。

这表明如何安全地使用 previousElementSibling,即在尝试访问其属性或方法之前先检查它是否存在。

来源

MDN previousElementSibling 文档

在本文中,我们展示了如何在 JavaScript 中使用 previousElementSibling 属性。此属性对于 Web 开发中的 DOM 遍历和元素导航至关重要。

作者

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

列出 所有 JS DOM 教程