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切换网页皮肤并保存到Cookie示例代码
Jun 16 Javascript
在父页面得到zTree已选中的节点的方法
Feb 12 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
Sep 30 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
Jan 13 Javascript
详解JS: reduce方法实现 webpack多文件入口
Feb 14 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
Sep 11 Javascript
利用express启动一个server服务的方法
Sep 17 Javascript
angular2中Http请求原理与用法详解
Jan 11 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
Oct 31 Javascript
vue实现随机验证码功能的实例代码
Apr 30 Javascript
vue+Element-ui实现登录注册表单
Nov 17 Javascript
JS+CSS实现过渡特效
Jan 02 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
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
php基于curl实现的股票信息查询类实例
2016/11/11 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
python简单的函数定义和用法实例
2015/05/07 Python
windows环境下tensorflow安装过程详解
2018/03/30 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
django 信号调度机制详解
2019/07/19 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
struct和class的区别
2015/11/20 面试题
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
工程安全生产协议书
2014/11/21 职场文书
董事会决议范本
2015/07/01 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技