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 select常用操作控制代码
Mar 16 Javascript
Jquery AJAX POST与GET之间的区别
Nov 14 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
Oct 17 Javascript
coffeescript使用的方式汇总
Aug 05 Javascript
JavaScript学习笔记之创建对象
Mar 25 Javascript
微信JS-SDK选取手机照片上传功能
Apr 21 Javascript
canvas基础绘制-绚丽倒计时的实例
Sep 17 Javascript
微信小程序上传图片到服务器实例代码
Nov 07 Javascript
在Vue组件上动态添加和删除属性方法
Feb 23 Javascript
JS表单传值和URL编码转换
Mar 03 Javascript
Vue组件之极简的地址选择器的实现
May 31 Javascript
解决vue-router 二级导航默认选中某一选项的问题
Nov 01 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获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
preg_match_all使用心得分享
2014/01/31 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
javascript hasFocus使用实例
2010/06/29 Javascript
Jquery选中或取消radio示例
2013/09/29 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
JS常用算法实现代码
2016/11/14 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
python3实现短网址和数字相互转换的方法
2015/04/28 Python
Python写入数据到MP3文件中的方法
2015/07/10 Python
python爬取足球直播吧五大联赛积分榜
2018/06/13 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
python解包用法详解
2021/02/17 Python
美国轮胎网站:Priority Tire
2018/11/28 全球购物
weblogic面试题
2016/03/07 面试题
商场端午节活动方案
2014/01/29 职场文书
信用卡工作证明模板
2014/09/14 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书