js获取元素所有兄弟节点的实现⽅法
⽐如⼀个ul⾥⾯有10个li,⽽第3个li上有特殊的样式(⽐如颜⾊为红⾊,其他为⿊⾊)。我想把其他所有li——不包括红的li ——的颜⾊也设为红⾊,此时,就需要获得红li的所有兄弟节点。
兄弟,就是和你平辈的,既不是上⼀级也不是下⼀级,⽽且可能有⽐你⼤的(兄),也可能⽐你⼩(弟)。兄弟节点同理,下⾯是⼀个常规的获取兄弟节点的办法。
代码如下
function siblings(elm) {
var a = [];
var p = elm.parentNode.children;
for(var i =0,pl= p.length;i<pl;i++) {
if(p[i] !== elm) a.push(p[i]);
}
return a;
}
思路:先获取此元素的⽗节点的所有⼦节点,因为所有⼦节点也包括此元素⾃⼰,所以要从结果中去掉⾃⼰。
还有另外⼀种看起来⽐较奇特的⽅法,是jQuery⾥⾯获取兄弟节点的源码:
代码如下
function sibling( elem ) {
var r = [];
var n = elem.parentNode.firstChild;
for ( ; n; n = n.nextSibling ) {
if ( n.nodeType === 1 && n !== elem ) {
jquery是什么有什么作用r.push( n );
}
}
return r;
}
思路:先到此元素的⽗节点的第⼀个⼦节点,然后循环查此节点的下⼀个兄弟节点,⼀直到查完毕。
我很奇怪为什么jQuery会使⽤这个⽅法,难道这个⽅法⽐第⼀个⽅法效率更⾼?
经过我初步测试——1500多个li,上⾯两个⽅法效率⼏乎⽆差别,都是⼏毫秒内就获取成功了。测试环境是chrome与firefox。
如果有获取所有兄弟节点的需求,可以使⽤以上任⼀⽅法。
当然,我会在以后的使⽤过程中验证以上两个⽅法,如果有出⼊,再更新吧。
JQUERY的⽗,⼦,兄弟节点查⽅法
jQuery.parent(expr) ⽗亲节点,可以传⼊expr进⾏过滤,⽐如$("span").parent()或者$("span").parent(".class")
jQuery.parents(expr),类似于jQuery.parents(expr),但是是查所有祖先元素,不限于⽗元素
jQuery.children(expr).返回所有⼦节点,这个⽅法只会返回直接的孩⼦节点,不会返回所有的⼦孙节点
jQuery对象返回,children()则只会返回节点
jQuery.prev(),返回上⼀个兄弟节点,不是所有的兄弟节点
jQuery.prevAll(),返回所有之前的兄弟节点
<(),返回下⼀个兄弟节点,不是所有的兄弟节点
jQuery.siblings(),返回兄弟妹节点,不分前后
jQuery.find(expr),跟jQuery.filter(expr)完全不⼀样。jQuery.filter()是从初始的jQuery对象集合中筛选出⼀部分,⽽jQuery.find()的返回结果,不会有初始集合中的内容,⽐如$("p"),find("span"),是从<p>元素开始<span>,等同于$("p span")
以上这篇js 获取元素所有兄弟节点的实现⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论