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 相关文章推荐
dwr spring的集成实现代码
Mar 22 Javascript
JS学习之一个简易的日历控件
Mar 24 Javascript
iframe 上下滚动条如何默认在下方实现原理
Dec 10 Javascript
jquery获取tr中控件值并操作tr实现思路
Mar 27 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
Aug 19 Javascript
jQuery获取上传文件的名称的正则表达式
May 21 Javascript
js实现固定显示区域内自动缩放图片的方法
Jul 18 Javascript
jQuery轮播图效果精简版完整示例
Sep 04 Javascript
jQuery中的100个技巧汇总
Dec 15 Javascript
jQuery UI Grid 模态框中的表格实例代码
Apr 01 jQuery
Vue-cli@3.0 插件系统简析
Sep 05 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
Feb 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
PHP读取文件内容的五种方式
2015/12/28 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
一些不错的js函数ajax
2008/08/20 Javascript
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
js实现翻页后保持checkbox选中状态的实现方法
2012/11/03 Javascript
jcrop基本参数一览
2013/07/16 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
python实时监控cpu小工具
2018/06/21 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
python-numpy-指数分布实例详解
2019/12/07 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
python lambda的使用详解
2021/02/26 Python
彪马美国官网:PUMA美国
2017/03/09 全球购物
DNA测试:Orig3n
2019/03/01 全球购物
网络编辑岗位职责范本
2014/02/10 职场文书
80后职场人的职业生涯规划
2014/03/08 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
开业庆典致辞
2015/08/01 职场文书
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python