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 相关文章推荐
动态加载iframe
Jun 16 Javascript
使用SyntaxHighlighter实现HTML高亮显示代码的方法
Feb 04 Javascript
js打开新窗口方法整理
Feb 17 Javascript
jquery无法设置checkbox选中即没有变成选中状态
Mar 27 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
Jun 15 Javascript
AngularJs directive详解及示例代码
Sep 01 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
Nov 20 Javascript
详解Vue使用命令行搭建单页面应用
May 24 Javascript
Js中async/await的执行顺序详解
Sep 22 Javascript
关于TypeScript模块导入的那些事
Jun 12 Javascript
详解Node.js一行命令上传本地文件到服务器
Apr 22 Javascript
vue在图片上传的时候压缩图片
Nov 18 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 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
PHP的几个常用加密函数
2016/02/03 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
jquery 实现窗口的最大化不论什么情况
2013/09/03 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
Python实现将Excel转换为json的方法示例
2017/08/05 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
Django实现发送邮件找回密码功能
2019/08/12 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
房地产销售计划书
2014/01/10 职场文书
网络管理专业求职信
2014/03/15 职场文书
《地震中的父与子》教学反思
2014/04/10 职场文书
合伙经营协议书范本
2014/09/13 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers