jQuery.closest() 函数详解

来源:互联网 发布:淘宝上的伊皇是真的吗 编辑:程序博客网 时间:2024/06/03 13:09

closest()函数用于从当前匹配元素开始,逐级向上级选取符合指定表达式的第一个元素,并以jQuery对象的形式返回。

这里的表达式包括:选择器(字符串)、DOM元素(Element)、jQuery对象。

该函数属于jQuery对象(实例)。

语法:

jQuery 1.3 新增该函数。

jQueryObject.closest( expr [, context ] )

参数

参数描述exprString/Element/jQuery类型指定的表达式。context可选/Element/jQuery类型指定表示查找范围的文档节点。


closest()函数将从当前元素本身开始,逐级向上查找第一个符合指定表达式的元素,该元素可能是当前元素自身,也可能是最靠近当前元素的一个祖先元素。

如果expr参数为字符串,它将被视作jQuery选择器。

jQuery 1.4 新增支持:添加context参数。

jQuery 1.6 新增支持:参数expr可以为DOM元素(Element)或jQuery对象

如果参数expr是选择器字符串,并且以>+~:even:odd:eq:gt:lt:nth:first:last等开头(忽略前端的空白字符),则context参数用于指定选择器expr的匹配范围,closest()函数将逐级向上查找该选择器匹配的元素。

当参数expr为其它情况时,如果当前元素的逐级查找过程中遇到了context所表示的元素,则停止本次查找。如果查找过程中没有经过context元素,则一直逐级查找下去,直到符合表达式expr或到顶为止。

closest()函数,还有一种参数用法:( exprs [, context ] ),这里的exprs是一个表达式数组(Array类型),返回的也是一个jQuery对象数组。该方法新增于1.4,在1.7中被标记过已过时,在1.8中被移除。因此不建议使用该用法,此处也不再介绍。如有需要请直接参考官方文档。

返回值

closest()函数的返回值为jQuery类型,返回一个新的jQuery对象,该对象包含从当前jQuery对象每个匹配元素自身开始(包括自己)、逐级向上查找到的最先匹配指定表达式的元素。

如果没有符合条件的元素,则返回空的jQuery对象。


示例&说明

以下面这段HTML代码为例:

<p id="n1">    <span id="n2">        <span id="n3">A</span>    </span>    <label id="n4">B</label>    <span id="n5" class="active">        <span id="n6" class="start active">C</span>            </span>    <strong id="n7" class="active">D</strong>    <span id="n8" class="active">E</span></p><p id="n9" class="active">    <span id="n10"></span>    <label id="n11"></label>    <span id="n12">        <span id="n13" class="start">F</span>    </span></p>

以下jQuery示例代码用于演示closest()函数的具体用法:

//返回jQuery对象所有匹配元素的标识信息数组//每个元素形如:#idfunction getTagsInfo($doms){    return $doms.map(function(){       return "#" + this.id;    }).get();}// 匹配n6元素var $n6 = $("#n6");// 从n6元素自身开始,逐级向上查找第一个p元素var $p = $n6.closest("p");document.writeln( getTagsInfo( $p ) ); // #n1// 从n6元素自身开始,逐级向上查找第一个span元素// 由于n6自己就是span元素,因此直接返回n6var $span = $n6.closest("span");document.writeln( getTagsInfo( $span ) ); // #n6// 匹配所有包含类名"start"的span元素:n6、n13var $starts = $("span.start");// 从包含类名"active"的span元素自身开始,逐级向上查找第一个包含类名"active"的元素// 1、从n6自身开始逐级向上查找,n6自己就是包含类名"active"的元素,因此匹配n6// 2、从n13自身开始逐级向上查找,n9是包含类名"active"的元素,因此匹配n9var $actives = $starts.closest(".active");document.writeln( getTagsInfo( $actives ) ); // #n6,#n9// 从包含类名"active"的span元素自身开始,逐级向上查找第一个包含类名"active"的元素// 并且,如果当前查找遇到n12,就停止向上查找// 1、从n6自身开始逐级向上查找,查找符合条件的n6,因此匹配n6(查找过程中没有经过n12)// 2、从n13自身开始逐级向上查找,在找到符合条件的n9之前会先经过n12,因此无法匹配n9var $actives = $starts.closest(".active", document.getElementById("n12"));document.writeln( getTagsInfo( $actives ) ); // #n6// 1、从n6自身开始逐级向上查找,查找符合条件的n6,因此匹配n6(查找过程中没有经过n8)// 2、从n13自身开始逐级向上查找,查找符合条件的n9,因此匹配n9(查找过程中没有经过n8)var $actives = $starts.closest(".active", document.getElementById("n8"));document.writeln( getTagsInfo( $actives ) ); // #n6,#n9// 参数( ":even", document.getElementById("n9") ) 相当于 ( "#n9 :even" ),匹配n10、n12// 1、从n6自身开始逐级向上查找,没有一个元素为n10或n12// 2、从n13自身开始逐级向上查找,找到符合条件的n12,因此匹配12var $doms = $starts.closest( ":even", document.getElementById("n9") );document.writeln( getTagsInfo( $doms ) ); // #n12出自:http://www.365mini.com/page/jquery-closest.htm


0 0