jquery parents()和closest()用法与区别介绍

例1

 代码如下 复制代码

<ul class="box" name="a">

    <li name="b" class="li_moito"><p><a href="#" class="moto">Hello Moto</a></p></li>

</ul>

 
如果要获取class="moto"的父级元素LI,可以用$(".moto").parent().parent()。但是比较繁琐,

实想要获取父级标签还有另外两种方法的,即parents()与closest()。

 
parents()方法:

该方法接受可选的选择器表达式,与我们向 $() 函数中传递的参数类型相同。如果应用这个选择器,则将通过检测元素是否匹配该选择器对元素进行筛选。

parents(),我想这个大家再熟悉不过了,它是取得所有符合条件的祖先元素(不包括本身),这是一个集合。

这里,我们可以:

 代码如下 复制代码

$(".moto").parents("li[name='b']");

或者

$(".moto").parents(".li_moito");

。.parents() 和 .parent() 方法类似,不同的是后者沿 DOM 树向上遍历单一层级。

请思考这个带有基本的嵌套列表的页面:

 代码如下 复制代码

<ul class="level-1">
  <li class="item-i">I</li>
  <li 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>

如果我们从项目 A 开始,则可找到其祖先元素:

 代码如下 复制代码

$('li.item-a').parents().css('background-color', 'red');

closest()方法:

closest(),这个方法呢就是向上检查元素并逐级匹配。首先,会从自身来匹配,匹配成

 
功就返回本身;不成功则向上寻找,直到找到匹配的选择器为止。如果没有则返回空对象。

可以这样写:

 代码如下 复制代码

$(".moto").closest("li[name='b']");

或者

$(".moto").closest(".li_moito");

closet(selector,context)中context参数的用法 从当前元素开始遍历到context元素结束,若不存在context参数
遍历到根结点

由此可见使用context参数可以提高查询效率!

 代码如下 复制代码

var listItemII = document.getElementById('ii'); //Item-II
//var listItemII=$(‘#ii'),这个不行,困惑好很久!
$('li.item-1').closest('ul', listItemII).css('background-color', 'red');
//结果必须是 item-1的父级ul元素,itemII的子元素,
$('li.item-1').closest('#one', listItemII).css('background-color', 'green');
//item-1的id=one的元素,且必须是itemII的子元素,未找到

5.context参数的分析

 代码如下 复制代码

closest: function( selectors, context ) {
var ret = [], i, l, cur = this[0];
// String
var pos = POS.test( selectors ) || typeof selectors !== "string" ?
jQuery( selectors, context || this.context ) :
0;
for ( i = 0, l = this.length; i < l; i++ ) {
cur = this[i];
while ( cur ) {
if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
//找到匹配元素,则将其添加返回值集合中!跳到下一元素的查找
ret.push( cur );
break;
} else {
cur = cur.parentNode;
//向上遍历DOM树,匹配选择器
//在上述过程中如果父结点不存在,到达根结点不存在或者找到context结点(已到达指定位置)!
if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
break;
}
}
}
}
ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
return this.pushStack( ret, "closest", selectors );
}

区分parents()与closest()

1、前者从父级开始匹配元素;而后者是从自身开始。

2、前者向上查找所有的父级元素,直至根元素,然后把这些查找的结果放到一个临时

的集合中,再通过额定的条件来进行筛选;后者是从自身元素开始向上查找,直到找到有效的匹配元素就停止。

3、前者返回元素值可以有0个、1个,或者是多个;后者只有0个或1个;

时间: 2024-11-05 18:43:28

jquery parents()和closest()用法与区别介绍的相关文章

jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别

        这篇文章主要是对jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 在这个sprint中,因为要写前端UI,所以用到了jQuery,但是jQuery在向上遍历DOM树的API中,有parents(). parent().closest()这几个,一直不太清楚它们具体的区别,所以狠下心好好读了一下jQuery的API文档,并把区别记在这里,以供参考.    1.parents

jQuery中$this和$(this)的区别介绍(一看就懂)_jquery

// this其实是一个Html 元素. // $this 只是个变量名,加$是为说明其是个jquery对象. // 而$(this)是个转换,将this表示的dom对象转为jquery对象,这样就可以使用jquery提供的方法操作. (function($){ $.fn.hilight = function(options){ debug(this); var defaults = { foreground: 'red', background: 'yellow' }; var opts =

基于jquery中children()与find()的区别介绍_jquery

.children(selector) 方法是返回匹配元素集合中每个元素的所有子元素(仅儿子辈).参数可选,添加参数表示通过选择器进行过滤,对元素进行筛选. .find(selector)方法是返回匹配元素集合中每个元素的后代.参数是必选的,可以为选择器.jquery对象可元素来对元素进行筛选. .find() 与 .children() 方法类似,不同的是后者仅沿着 DOM 树向下遍历单一层级.这里的children,我理解为儿子,只在儿子这一级遍历.看下例子: 复制代码 代码如下: .chi

jquery对象和DOM对象的区别介绍_jquery

第一步,http://www.k99k.com/jQuery_getting_started.html 第二步,新手先仔细得全部看一遍jQuery的选择器,很重要!!! (http://shawphy.com/jqueryapi/ 这里是最新文档,有离线版下载) 第三步,深刻了解jQuery对象和普通DOM对象的区别.互相转化见Q1 Q1,js的写法:document.getElementById('save').disabled=true; 在jquery中我是这样写的$("#save&quo

jQuery获取attr()与prop()属性值的方法及区别介绍_jquery

今天在项目中使用<select></select>下拉菜单时,使用juery操作,使页面加载完菜单默认选中的值为2,我一开始的操作如下: <!--html部分--> <select> <option value="1">1</option> <option value="2">2</option> <option value="3">3&l

jQuery表格插件datatables用法详解_jquery

一.Datatables简介DataTables是一个jQuery的表格插件.这是一个高度灵活的工具,依据的基础逐步增强,这将增加先进的互动控制,支持任何HTML表格.主要特点: 自动分页处理 即时表格数据过滤 数据排序以及数据类型自动检测 自动处理列宽度 可通过CSS定制样式 支持隐藏列 易用 可扩展性和灵活性 国际化 动态创建表格 免费的 二.如何使用在做后台的时候并没有美工和前端工程师来配合你做页面,为了显示数据并有一定的美感,我们可以使用jQuery的DataTables插件来帮助我们完

jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析_jquery

closest() 方法获得匹配选择器的第一个祖先元素,从当前元素开始沿 DOM 树向上. 语法: .closest(selector) 参数selector为字符串值,包含匹配元素的选择器表达式. 如果给定表示 DOM 元素集合的 jQuery 对象,.closest() 方法允许我们检索 DOM 树中的这些元素以及它们的祖先元素,并用匹配元素构造新的 jQuery 对象..parents() 和 .closest() 方法类似,它们都沿 DOM 树向上遍历.两者之间的差异尽管微妙,却很重要:

jQuery中delegate与on的用法与区别

 jQuery1.7中 .delegate()已被.on()取代,下面以示例的方式为大家介绍下jQuery中delegate与on的用法与区别,感兴趣的朋友可以参考下 在jQuery1.7中 .delegate()已被.on()取代.对于早期版本,它仍然使用事件委托的最有效手段.  在事件绑定和委派,delegate()和on在一般情况下,这两种方法是等效的.    .delegate() 指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数.  代码如

jQuery中delegate和on的用法与区别详细解析

 本篇文章主要是对jQuery中delegate和on的用法与区别进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 在jQuery1.7中 .delegate()已被.on()取代.对于早期版本,它仍然使用事件委托的最有效手段. 在事件绑定和委派,delegate()和on在一般情况下,这两种方法是等效的.   .delegate() 指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数.    代码如下: // jQuery 1.4.3+