摘要:在本教程中,您将学习如何选择元素的下一个兄弟节点、上一个兄弟节点和所有兄弟节点。
假设您有以下项目列表
<ul id="menu">
<li>Home</li>
<li>Products</li>
<li class="current">Customer Support</li>
<li>Careers</li>
<li>Investors</li>
<li>News</li>
<li>About Us</li>
</ul>
Code language: HTML, XML (xml)
获取下一个兄弟节点
要获取元素的下一个兄弟节点,请使用nextElementSibling
属性
let nextSibling = currentNode.nextElementSibling;
Code language: JavaScript (javascript)
如果指定元素是列表中的最后一个元素,则nextElementSibling
返回null
。
以下示例使用nextElementSibling
属性来获取具有current
类的列表项的下一个兄弟节点
let current = document.querySelector('.current');
let nextSibling = current.nextElementSibling;
console.log(nextSibling);
Code language: JavaScript (javascript)
输出
<li>Careers</li>
Code language: HTML, XML (xml)
在这个例子中
- 首先,使用
querySelector()
选择类为current
的列表项。 - 其次,使用
nextElementSibling
属性获取该列表项的下一个兄弟节点。
要获取元素的所有下一个兄弟节点,您可以使用以下代码
let current = document.querySelector('.current');
let nextSibling = current.nextElementSibling;
while(nextSibling) {
console.log(nextSibling);
nextSibling = nextSibling.nextElementSibling;
}
Code language: JavaScript (javascript)
获取上一个兄弟节点
要获取元素的上一个兄弟节点,请使用previousElementSibling
属性
let current = document.querySelector('.current');
let prevSibling = currentNode.previousElementSibling;
Code language: JavaScript (javascript)
如果当前元素是列表中的第一个元素,则previousElementSibling
属性返回null
。
以下示例使用previousElementSibling
属性来获取具有current
类的列表项的上一个兄弟节点
let current = document.querySelector('.current');
let prevSiblings = current.previousElementSibling;
console.log(prevSiblings);
Code language: JavaScript (javascript)
以下示例选择具有current
类的列表项的所有上一个兄弟节点
let current = document.querySelector('.current');
let prevSibling = current.previousElementSibling;
while(prevSibling) {
console.log(prevSibling);
prevSibling = current.previousElementSibling;
}
Code language: JavaScript (javascript)
获取元素的所有兄弟节点
要获取元素的所有兄弟节点,我们将使用以下逻辑
- 首先,选择您要查找其兄弟节点的元素的父元素。
- 其次,选择该父元素的第一个子元素。
- 第三,将第一个元素添加到兄弟节点数组中。
- 第四,选择第一个元素的下一个兄弟节点。
- 最后,重复第 3 和第 4 步,直到没有兄弟节点为止。如果兄弟节点是原始元素,请跳过第 3 步。
以下函数说明了这些步骤
let getSiblings = function (e) {
// for collecting siblings
let siblings = [];
// if no parent, return no sibling
if(!e.parentNode) {
return siblings;
}
// first child of the parent node
let sibling = e.parentNode.firstChild;
// collecting siblings
while (sibling) {
if (sibling.nodeType === 1 && sibling !== e) {
siblings.push(sibling);
}
sibling = sibling.nextSibling;
}
return siblings;
};
Code language: JavaScript (javascript)
整合所有内容
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JavaScript Siblings</title>
</head>
<body>
<ul id="menu">
<li>Home</li>
<li>Products</li>
<li class="current">Customer Support</li>
<li>Careers</li>
<li>Investors</li>
<li>News</li>
<li>About Us</li>
</ul>
<script>
let getSiblings = function (e) {
// for collecting siblings
let siblings = [];
// if no parent, return no sibling
if(!e.parentNode) {
return siblings;
}
// first child of the parent node
let sibling = e.parentNode.firstChild;
// collecting siblings
while (sibling) {
if (sibling.nodeType === 1 && sibling !== e) {
siblings.push(sibling);
}
sibling = sibling.nextSibling;
}
return siblings;
};
let siblings = getSiblings(document.querySelector('.current'));
siblingText = siblings.map(e => e.innerHTML);
console.log(siblingText);
</script>
</body>
</html>
Code language: HTML, XML (xml)
输出
["Home", "Products", "Careers", "Investors", "News", "About Us"]
Code language: JSON / JSON with Comments (json)
摘要
nextElementSibling
返回元素的下一个兄弟节点,如果元素是列表中的最后一个元素,则返回null
。previousElementSibling
返回元素的上一个兄弟节点,如果元素是列表中的第一个元素,则返回null
。- 要获取元素的所有兄弟节点,您可以使用利用
nextElementSibling
属性的辅助函数。
测验
本教程是否有帮助?