JS获取兄弟节点,父节点,子节点
这里我介绍两种方法,一种是通过自己,现在上一个兄弟节点,通过nodeType判断是否是元素节点,是就push 到一个新数组,在查找上一个兄弟节点依次类推,直到空;另一种是查找父节点,然后找到父节点下的所有子节点,在排除自己。
第一种:
function siblings(obj) {
var a = []; // 定义一个数组,用来存 obj 的兄弟元素
var p = obj.previousSibling;
while(p) { // 先取 obj 的哥哥们,判断有没有上一个哥哥元素,如果有则往下执行
if(p.nodeType === 1) {
a.push(p);
}
p = p.previousSibling // 最后把上一个节点赋给 p
}
a.reverse() // 把顺序反转一下 这样元素的顺序就是按先后的了
var n = obj.nextSibling; //再取 obj 的弟弟
while(n) { // 判断有没有下一个弟弟结点
if(n.nodeType === 1) {
a.push(n);
}
n = n.nextSibling;
}
return a;
};
第二种:
(function(){
// obj 是 需要获取兄弟节点的那个元素
function getSiblings(obj){
var a = [];
var p = obj.parentNode.children;
var pl = p.length;
for(var i = 0; i < pl; i++) {
if(p[i] !== obj) a.push(p[i]);
}
return a;
}
// 将类进行暴露
window.getSiblings = getSiblings;
})()
调用:
<ul>
<li class="one">1</li>
<li class="two">2</li>
<li class="three">3</li>
<li class="four">4</li>
</ul>
// 获取该元素
var li = document.getElementsByClassName('two')[0];
// 其他兄弟元素
var lis = new getSiblings(li);
console.log(lis);