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 入门基础知识 想学习js的朋友可以参考下
Dec 26 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
Jul 08 Javascript
JavaScript实现select添加option
Jul 03 Javascript
JavaScript重载函数实例剖析
May 13 Javascript
AngularJS基础 ng-switch 指令简单示例
Aug 03 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
Oct 13 Javascript
js仿淘宝商品放大预览功能
Mar 15 Javascript
JavaScript对象_动力节点Java学院整理
Jun 23 Javascript
ReactNative列表ListView的用法
Aug 02 Javascript
浅谈在node.js进入文件目录的问题
May 13 Javascript
基于iview的router常用控制方式
May 30 Javascript
ng-alain的sf如何自定义部件的流程
Jun 12 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
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
微信小程序 本地数据读取实例
2017/04/27 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
javascript单张多张图无缝滚动实例代码
2020/05/10 Javascript
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
Python实现打印实心和空心菱形
2019/11/23 Python
python实现三种随机请求头方式
2021/01/05 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
小学生差生评语
2014/12/29 职场文书
追悼词范文大全
2015/06/23 职场文书
Python基础之字符串格式化详解
2021/04/21 Python
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL