jQuery.closest() 函数详解
作者:互联网
closest()函数用于从当前匹配元素开始,逐级向上级选取符合指定表达式的第一个元素,并以jQuery对象的形式返回。
这里的表达式包括:选择器(字符串)、DOM元素(Element)、jQuery对象。
该函数属于jQuery对象(实例)。
语法:
jQuery 1.3 新增该函数。
jQueryObject.closest( expr [, context ] )
参数
参数 | 描述 |
---|---|
expr | String/Element/jQuery类型指定的表达式。 |
context | 可选/Element/jQuery类型指定表示查找范围的文档节点。 |
closest()函数将从当前元素本身开始,逐级向上查找第一个符合指定表达式的元素,该元素可能是当前元素自身,也可能是最靠近当前元素的一个祖先元素。
如果expr参数为字符串,它将被视作jQuery选择器。
jQuery 1.4 新增支持:添加context参数。
jQuery 1.6 新增支持:参数expr可以为DOM元素(Element)或jQuery对象。
如果参数expr是选择器字符串,并且以、、、、、、、、、或等开头(忽略前端的空白字符),则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
标签:jQuery,closest,元素,查找,详解,逐级,n6 来源: https://blog.51cto.com/u_12198094/2698039