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 同时提交多个Web表单的方法
Feb 19 Javascript
几个比较经典常用的jQuery小技巧
Mar 01 Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
Apr 25 Javascript
关于IE BUG与字符串截取substr的解决办法
Apr 10 Javascript
js实现的map方法示例代码
Jan 13 Javascript
Javascript技术难点之apply,call与this之间的衔接
Dec 04 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
Jan 23 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
Feb 27 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
Aug 01 Javascript
vue全局组件与局部组件使用方法详解
Mar 29 Javascript
AngularJS自定义过滤器用法经典实例总结
May 17 Javascript
浅谈HTTP 缓存的那些事儿
Oct 17 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 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
2013/06/18 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
华三通信H3C面试题
2015/05/15 面试题
机械电子工程毕业生自荐信
2013/11/23 职场文书
企业业务员岗位职责
2014/03/14 职场文书
投资协议书范本
2014/04/21 职场文书
法制宣传教育方案
2014/05/09 职场文书
企业年度评优方案
2014/06/02 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
公司市场部岗位职责
2015/04/15 职场文书
针对吵架老公保证书
2015/05/08 职场文书
保留意见审计报告
2015/06/05 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
情人节单身感言
2015/08/03 职场文书
公共场所卫生管理制度
2015/08/05 职场文书
交通安全教育心得体会
2016/01/15 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
Python闭包的定义和使用方法
2022/04/11 Python
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python