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 animate图片模向滑动示例代码
Jan 26 Javascript
JQuery筛选器全系列介绍
Aug 27 Javascript
JS去除数组重复值的五种不同方法
Sep 06 Javascript
JQuery加载图片自适应固定大小的DIV
Sep 12 Javascript
使用node.js 获取客户端信息代码分享
Nov 26 Javascript
Jquery使用小技巧汇总
Dec 29 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
Jan 14 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
Sep 25 Javascript
electron实现qq快捷登录的方法示例
Oct 22 Javascript
jQuery实现的自定义轮播图功能详解
Dec 28 jQuery
vue使用recorder.js实现录音功能
Nov 22 Javascript
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
用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文件操作的详细诠释
2013/06/21 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
菜鸟javascript基础资料整理2
2010/12/06 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
javascript模拟命名空间
2015/04/17 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
AngularJS ui-router (嵌套路由)实例
2017/03/10 Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
2017/07/11 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
vue实现倒计时获取验证码效果
2020/04/17 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
Python简单定义与使用字典dict的方法示例
2017/07/25 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
利用python 下载bilibili视频
2020/11/13 Python
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
义和团口号
2014/06/17 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
如何写好开幕词?
2019/06/24 职场文书
Jsonp劫持学习
2021/04/01 PHP
React列表栏及购物车组件使用详解
2021/06/28 Javascript
JavaScript的Set数据结构详解
2022/02/18 Javascript
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL