内容目录
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
是选择器字符串,并且以>
、+
、~
、: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对象所有匹配元素的标识信息数组
//每个元素形如:#id
function 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元素,因此直接返回n6
var $span = $n6.closest("span");
document.writeln( getTagsInfo( $span ) ); // #n6
// 匹配所有包含类名"start"的span元素:n6、n13
var $starts = $("span.start");
// 从包含类名"active"的span元素自身开始,逐级向上查找第一个包含类名"active"的元素
// 1、从n6自身开始逐级向上查找,n6自己就是包含类名"active"的元素,因此匹配n6
// 2、从n13自身开始逐级向上查找,n9是包含类名"active"的元素,因此匹配n9
var $actives = $starts.closest(".active");
document.writeln( getTagsInfo( $actives ) ); // #n6,#n9
// 从包含类名"active"的span元素自身开始,逐级向上查找第一个包含类名"active"的元素
// 并且,如果当前查找遇到n12,就停止向上查找
// 1、从n6自身开始逐级向上查找,查找符合条件的n6,因此匹配n6(查找过程中没有经过n12)
// 2、从n13自身开始逐级向上查找,在找到符合条件的n9之前会先经过n12,因此无法匹配n9
var $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,因此匹配12
var $doms = $starts.closest( ":even", document.getElementById("n9") );
document.writeln( getTagsInfo( $doms ) ); // #n12
0 条评论
撰写评论