当前位置: 首页 > 中文手册 > jQuery.closest() 函数详解

jQuery.closest() 函数详解

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对象所有匹配元素的标识信息数组
//每个元素形如:#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

运行代码

22 2
我们认为: 用户的主要目的,是为了获取有用的信息,而不是来点击广告的。因此本站将竭力做好内容,并将广告和内容进行分离,确保所有广告不会影响到用户的正常阅读体验。用户仅凭个人意愿和兴趣爱好点击广告。
我们坚信:只有给用户带来价值,用户才会给我们以回报。
CodePlayer技术交流群1CodePlayer技术交流群1

帮朋友打一个硬广告:

P2P网贷系统(Java版本) 新年低价大促销,多年P2P技术积累,系统功能完善(可按需定制,可支持第三方存管、银行存管),架构稳定灵活、性能优异、二次开发快速简单。 另可提供二次开发、安装部署、售后维护、安全培训等一条龙服务。

外行看热闹,内行看门道。可以自信地认为,在系统设计上,比市面上的晓风、迪蒙、方维、绿麻雀、国融信、金和盛等P2P系统要好。
深圳地区支持自带技术人员现场考察源代码、了解主要技术架构,货比三家,再决定是否购买。

也可推荐他人购买,一旦完全成交,推荐人可获得实际售价 10% 的返现。
有意向者,详情请 点击这里 联系,工作时间立即回复。