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 相关文章推荐
指定位置如果有图片显示图片,无图片显示广告的JS
Jun 05 Javascript
jquery 插件学习(六)
Aug 06 Javascript
jquery的相对父元素和相对文档定位示例代码
Aug 02 Javascript
js 跳出页面的frameset框架示例介绍
Dec 23 Javascript
jquery选择器大全 全面详解jquery选择器
Mar 06 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
Dec 28 Javascript
Javascript实现前端简单的路由实例
Sep 11 Javascript
JavaScript表单验证的两种实现方法
Feb 11 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
Jul 13 Javascript
javascript  数组排序与对象排序的实例
Jul 17 Javascript
详解Vue中使用Axios拦截器
Apr 22 Javascript
在vue中使用防抖函数组件操作
Jul 26 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制作简单的内容采集器的代码
2007/11/28 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
Javascript Global对象
2009/08/13 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
easyui combogrid实现本地模糊搜索过滤多列
2017/05/13 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
JavaScript的词法结构精华篇
2018/10/17 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
[00:10]DOTA2全国高校联赛速递
2018/05/30 DOTA
Python中文字符串截取问题
2015/06/15 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
Python实现Linux中的du命令
2017/06/12 Python
python3+mysql查询数据并通过邮件群发excel附件
2018/02/24 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
python的常见矩阵运算(小结)
2019/08/07 Python
python 穷举指定长度的密码例子
2020/04/02 Python
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
史上最全面的Java面试题汇总!
2015/02/03 面试题
客服主管岗位职责
2013/12/13 职场文书
关于旷工的检讨书
2014/02/02 职场文书
2014年平安夜寄语
2014/12/08 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
python实现网络五子棋
2021/04/11 Python
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL