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 24 Javascript
javascript中的throttle和debounce浅析
Jun 06 Javascript
JavaScript中判断整字类型最简洁的实现方法
Nov 08 Javascript
windows下vue.js开发环境搭建教程
Mar 20 Javascript
vuex的使用及持久化state的方式详解
Jan 23 Javascript
微信小程序switch开关选择器使用详解
Jan 31 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
Feb 27 jQuery
Vue开发之封装分页组件与使用示例
Apr 25 Javascript
Webpack 4如何动态切割JS注入文件名详解
Jul 09 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
Jul 25 Javascript
解决layui弹框失效的问题
Sep 09 Javascript
Vue双向绑定实现原理与方法详解
May 07 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
再次研究下cache_lite
2007/02/14 PHP
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
Python中文件的读取和写入操作
2018/04/27 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
pandas中read_csv的缺失值处理方式
2019/12/19 Python
python中count函数简单的实例讲解
2020/02/06 Python
Python中zip()函数的解释和可视化(实例详解)
2020/02/16 Python
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
Reformation官网:美国女装品牌
2018/09/14 全球购物
普通PHP程序员笔试题
2016/01/01 面试题
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
三方股份合作协议书
2014/10/13 职场文书
2014年团总支工作总结
2014/11/21 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
宿舍管理制度范本
2015/08/07 职场文书
无故旷工检讨书
2015/08/15 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL