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 文本框使用小结
May 22 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
Mar 01 Javascript
js循环改变div颜色具体方法
Jun 25 Javascript
JSON无限折叠菜单编写实例
Dec 16 Javascript
Ajax提交与传统表单提交的区别说明
Feb 07 Javascript
8个实用的jQuery技巧
Mar 04 Javascript
angularjs自定义ng-model标签的属性
Jan 21 Javascript
值得分享的JavaScript实现图片轮播组件
Nov 21 Javascript
使用Angular缓存父页面数据的方法
Jan 03 Javascript
详解Angualr 组件间通信
Jan 21 Javascript
D3.js中强制异步文件读取同步的几种方法
Feb 06 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
Nov 22 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
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
解析php中如何直接执行SHELL
2013/06/28 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
用Jquery实现滚动新闻
2014/02/12 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
浅谈jQuery的offset()方法及示例分享
2015/07/17 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
几个提升Python运行效率的方法之间的对比
2015/04/03 Python
在windows系统中实现python3安装lxml
2016/03/23 Python
python实现获取Ip归属地等信息
2016/08/27 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
python调试神器PySnooper的使用
2019/07/03 Python
django在开发中取消外键约束的实现
2020/05/20 Python
清洁工岗位职责
2014/01/29 职场文书
应届毕业生自荐书
2014/06/18 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
社区服务活动感想
2015/08/11 职场文书
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python