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动态创建link标签到head里的方法
Dec 22 Javascript
javascript数组去重的方法汇总
Apr 14 Javascript
jQuery图片轮播滚动切换代码分享
Apr 20 Javascript
理解javascript中的严格模式
Feb 01 Javascript
通过正则表达式获取url中参数的简单实现
Jun 07 Javascript
微信小程序 地图定位简单实例
Oct 14 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
Mar 27 Javascript
bootstrap基本配置_动力节点Java学院整理
Jul 14 Javascript
详解React Native网络请求fetch简单封装
Aug 10 Javascript
js 提取某()特殊字符串长度的实例
Dec 06 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
Apr 25 Javascript
Vue3中的Refs和Ref详情
Nov 11 Vue.js
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/08 PHP
PHP中的静态变量及static静态变量使用详解
2015/11/05 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
2019/10/22 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
秘书行业自我鉴定范文
2013/12/30 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
2014年标准化工作总结
2014/12/17 职场文书
推广普通话主题班会
2015/08/17 职场文书
利用Python实时获取steam特惠游戏数据
2022/06/25 Python