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 相关文章推荐
js获取当前日期代码适用于网页头部
Jun 27 Javascript
JavaScript中使用Substring删除字符串最后一个字符
Nov 03 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
Dec 08 Javascript
table insertRow、deleteRow定义和用法总结
May 14 Javascript
谷歌浏览器不支持showModalDialog模态对话框的解决方法
Sep 22 Javascript
jQuery动态创建元素以及追加节点的实现方法
Oct 20 Javascript
jQuery Easyui 下拉树组件combotree
Dec 16 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
Sep 29 Javascript
详解node.js中的npm和webpack配置方法
Jan 21 Javascript
Angular8 Http拦截器简单使用教程
Aug 20 Javascript
vue el-table实现自定义表头
Dec 11 Javascript
JavaScript实现简单的音乐播放器
Aug 14 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引用地址改变变量值的问题
2012/03/23 PHP
使用phpQuery采集网页的方法
2013/11/13 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
jQuery中size()方法用法实例
2014/12/27 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
2019/03/20 Javascript
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
python使用PIL缩放网络图片并保存的方法
2015/04/24 Python
详解Django通用视图中的函数包装
2015/07/21 Python
Python二分查找详解
2015/09/13 Python
python解决网站的反爬虫策略总结
2016/10/26 Python
Django实现分页功能
2018/07/02 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
美国按摩椅批发网站:Titan Chair
2018/12/27 全球购物
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
怎样让char类型的东西转换成int类型
2013/12/09 面试题
你们项目是如何进行变更控制的
2015/08/26 面试题
乡镇消防工作实施方案
2014/03/27 职场文书
长城导游词300字
2015/01/30 职场文书
毕业班工作总结
2015/08/10 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL