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 相关文章推荐
javascript object array方法使用详解
Dec 03 Javascript
使用javascript控制cookie显示和隐藏背景图
Feb 12 Javascript
js 删除数组的几种方法小结
Feb 21 Javascript
jquery设置按钮停顿3秒不可用
Mar 07 Javascript
js检验密码强度(低中高)附图
Jun 05 Javascript
javascript实现验证IP地址等相关信息代码
May 10 Javascript
jQuery实现图片渐入渐出切换展示效果
Aug 15 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
Dec 08 Javascript
JavaScript结合HTML DOM实现联动菜单
Apr 05 Javascript
JSON字符串操作移除空串更改key/value的介绍
Jan 05 Javascript
比较node.js和Deno
Apr 27 Javascript
如何用Node.js编写内存效率高的应用程序
Apr 30 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
火车头采集器3.0采集图文教程
2007/03/17 PHP
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
网上抓的一个特效
2007/05/11 Javascript
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
JavaScript 面向对象之命名空间
2010/05/04 Javascript
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
jquery对table中各数据的增加、保存、删除操作示例
2014/05/14 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
Python中的 enum 模块源码详析
2019/01/09 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
Python循环结构的应用场景详解
2019/07/11 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
2020/10/15 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
集团公司总经理岗位职责
2013/12/20 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
vue使用watch监听属性变化
2022/04/30 Vue.js