jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析


Posted in Javascript onApril 26, 2013

closest() 方法获得匹配选择器的第一个祖先元素从当前元素开始沿 DOM 树向上。

语法:

.closest(selector)

参数selector为字符串值,包含匹配元素的选择器表达式。

如果给定表示 DOM 元素集合的 jQuery 对象,.closest() 方法允许我们检索 DOM 树中的这些元素以及它们的祖先元素,并用匹配元素构造新的 jQuery 对象。.parents() 和 .closest() 方法类似,它们都沿 DOM 树向上遍历。两者之间的差异尽管微妙,却很重要:

.closest() .parents()
从当前元素开始 从父元素开始
沿 DOM 树向上遍历,直到找到已应用选择器的一个匹配为止。 沿 DOM 树向上遍历,直到文档的根元素为止,将每个祖先元素添加到一个临时的集合;如果应用了选择器,则会基于该选择器对这个集合进行筛选。 
返回包含零个或一个元素的 jQuery 对象 返回包含零个、一个或多个元素的 jQuery 对象

先看下面的示例:演示如何通过 closest() 完成事件委托。当被最接近的列表元素或其子后代元素被点击时,会切换黄色背景
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="/jquery/jquery.js"></script>
<style>
  li { margin: 3px; padding: 3px; background: #EEEEEE; }
  li.hilight { background: yellow; }
</style>
</head>
<body>
  <ul>
    <li><b>Click me!</b></li>
    <li>You can also <b>Click me!</b></li>
  </ul>
<script>
  $( document ).bind("click", function( e ) {
    $( e.target ).closest("li").toggleClass("hilight");
  });
</script>
</body>
</html>

1、当鼠标点击“You can also”时,颜色出现变化。这是因为closest是从当前元素开始向上遍历的。而不同于parents()方法,是从当前元素的父元素开始向上遍历。

2、当点击Click me!时,颜色也会变化。这同样经过上面步骤,从当前元素向上匹配,只不过<b>不符合条件,再往上时遇见了<li>。
3、实例演示请访问:http://www.w3school.com.cn/tiy/t.asp?f=jquery_traversing_closest

例2:

<ul id="one" class="level-1">
  <li class="item-i">I</li>
  <li id="ii" class="item-ii">II
  <ul class="level-2">
    <li class="item-a">A</li>
    <li class="item-b">B
      <ul class="level-3">
        <li class="item-1">1</li>
        <li class="item-2">2</li>
        <li class="item-3">3</li>
      </ul>
    </li>
    <li class="item-c">C</li>
  </ul>
  </li>
  <li class="item-iii">III</li>
</ul>

$('li.item-a').closest('ul').css('background-color', 'red');

结果:

这会改变 level-2 <ul> 的颜色,这是因为当向上遍历 DOM 树时会第一个遇到该元素。

如下图所示:

jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析

假设我们搜索的是 <li> 元素

$('li.item-a').closest('li').css('background-color', 'red');

这会改变列表项目 A 的颜色。在向上遍历 DOM 树之前,.closest() 方法会从 li 元素本身开始搜索,直到选择器匹配项目 A 为止。

例子 3

我们可以传递 DOM 元素作为 context(即限定搜索的最大范围),在其中搜索最接近的元素。

var listItemII = document.getElementById('ii');
$('li.item-a').closest('ul', listItemII).css('background-color', 'red');
$('li.item-a').closest('#one', listItemII).css('background-color', 'green');

以上代码会改变 level-2 <ul> 的颜色,因为它既是列表项 A 的第一个 <ul> 祖先,同时也是列表项 II 的后代。

它不会改变 level-1 <ul> 的颜色,因为它不是 list item II 的后代。

Javascript 相关文章推荐
使用jQuery简化Ajax开发 Ajax开发入门
Oct 14 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
Jul 22 Javascript
thinkphp中常用的系统常量和系统变量
Mar 05 Javascript
js实现无限级树形导航列表效果代码
Sep 23 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
Feb 21 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
Mar 01 Javascript
利用Node.js对文件进行重命名
Mar 12 Javascript
JavaScript错误处理和堆栈追踪详解
Apr 18 Javascript
vue中轮训器的使用
Jan 27 Javascript
angular 表单验证器验证的同时限制输入的实现
Apr 11 Javascript
vue.js购物车添加商品组件的方法
Sep 17 Javascript
ES6新增的数组知识实例小结
May 23 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
Apr 26 #Javascript
关于jquery.validate1.9.0前台验证的使用介绍
Apr 26 #Javascript
jQuery.Validate验证库的使用介绍
Apr 26 #Javascript
基于jQuery.Validate验证库知识点的详解
Apr 26 #Javascript
关于jQuery新的事件绑定机制on()的使用技巧
Apr 26 #Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
Apr 25 #Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
Apr 25 #Javascript
You might like
php验证码实现代码(3种)
2015/09/07 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
有趣的javascript数组定义方法
2010/09/10 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
jquery.cookie.js使用指南
2015/01/05 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
使用python实现baidu hi自动登录的代码
2013/02/10 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
python程序文件扩展名知识点详解
2020/02/27 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
解决Windows下python和pip命令无法使用的问题
2020/08/31 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
一个精品风格的世界:Atterley
2019/05/01 全球购物
自我鉴定标准格式
2014/03/19 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
简单租房协议书范本
2014/08/20 职场文书
银行员工考核评语
2014/12/31 职场文书
新年晚会开场白
2015/05/29 职场文书
秋菊打官司观后感
2015/06/03 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python