js 获取元素所有兄弟节点的实现方法


Posted in Javascript onSeptember 06, 2016

比如一个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 ) {
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.contents(),返回下面的所有内容,包括节点和文本。这个方法和children()的区别就在于,包括空白文本,也会被作为一个

jQuery对象返回,children()则只会返回节点

jQuery.prev(),返回上一个兄弟节点,不是所有的兄弟节点

jQuery.prevAll(),返回所有之前的兄弟节点

jQuery.next(),返回下一个兄弟节点,不是所有的兄弟节点

jQuery.nextAll(),返回所有之后的兄弟节点

jQuery.siblings(),返回兄弟姐妹节点,不分前后

jQuery.find(expr),跟jQuery.filter(expr)完全不一样。jQuery.filter()是从初始的jQuery对象集合中筛选出一部分,而jQuery.find()

的返回结果,不会有初始集合中的内容,比如$("p"),find("span"),是从<p>元素开始找<span>,等同于$("p span")

以上这篇js 获取元素所有兄弟节点的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery submit()无法提交问题
Apr 21 Javascript
Jquery中val()表单取值赋值的实例代码
Aug 15 Javascript
js实现省份下拉菜单效果
Feb 15 Javascript
100行代码理解和分析vue2.0响应式架构
Mar 09 Javascript
js轮播图无缝滚动效果
Jun 17 Javascript
JavaScript实现的数字与字符串转换功能示例
Aug 23 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
Apr 14 Javascript
小程序ios音频播放没声音问题的解决
Jul 11 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
Aug 24 Javascript
vue2.0自定义指令示例代码详解
Apr 25 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
Apr 30 Javascript
JS校验与最终登陆界面功能完整示例
Jan 13 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
Sep 06 #Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
Sep 06 #Javascript
使用JS实现图片展示瀑布流效果(简单实例)
Sep 06 #Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
Sep 06 #Javascript
原生JS:Date对象全面解析
Sep 06 #Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
Sep 06 #Javascript
Vue.js每天必学之过渡与动画
Sep 06 #Javascript
You might like
php str_replace的替换漏洞
2008/03/15 PHP
PHP教程 基本语法
2009/10/23 PHP
PHP isset()与empty()的使用区别详解
2010/08/29 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
面向对象设计模式的核心法则
2013/11/10 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
vue2.0 路由不显示router-view的解决方法
2018/03/06 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
Python字符串函数strip()原理及用法详解
2020/07/23 Python
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
学期自我鉴定范文
2013/10/01 职场文书
业务代表的岗位职责
2013/11/16 职场文书
公司离职证明范本
2014/01/13 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
恐龙的灭绝教学反思
2014/02/12 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
终止劳动合同通知书
2015/04/16 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书