返回值:jQueryclosest(selector)
取得与选择器相匹配的第一个元素,从当前元素开始,在 DOM 树中向上查找。
-
1.3 新增closest(selector)
selector (Selector) 用于匹配元素的选择器表达式字符串。 -
1.4 新增closest(selector, [context])
selector (Selector) 用于匹配元素的选择器表达式字符串。context (Element) 可选参数,用于查找可能匹配到的 DOM 元素。如果不提供 context 参数,那么会使用 jQuery 集合的 context。 -
1.6 新增closest(jQuery object)
jQuery object (jQuery) 用于查找匹配的 jQuery 对象。 -
1.6 新增closest(element)
element (Element) 用于查找匹配的元素。
若一个 jQuery 对象代表了一个 DOM 元素集合,.closest()
方法会在 DOM 树中查找这些元素和它们的祖先元素,并根据匹配到的元素构建一个新的 jQuery 对象。.parents()
和 .closest()
方法很类似,它们都是在 DOM 树中向上遍历。虽然它们之间的区别很微妙,但是却很重要:
.closest() | .parents() |
---|---|
从当前元素开始查找 | 从父元素开始查找 |
在 DOM 树中向上遍历,直到找到了与提供的选择器相匹配的元素 | 在 DOM 树中向上遍历,直至文件的根元素,将每个祖先元素添加到一个临时的集合中,若提供了选择器,则会使用该选择器在集合中进行过滤 |
返回包括 0 个或 1 个 元素的 jQuery 对象 | 返回包括 0 个, 1 个 或多个元素的 jQuery 对象 |
<ul id="one" class="level-1"> <li class="item-i">I</li> <li id="ii" 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 开始,查找 <ul>
元素:
$('li.item-a').closest('ul') .css('background-color', 'red');
其结果是改变了 level-2 <ul>
的颜色,因为在 DOM 中向上遍历时,它是第一个匹配的元素。
例如这一次我们要查找 <li>
元素:
$('li.item-a').closest('li') .css('background-color', 'red');
其结果是改变了列表项 A 的元素。.closest()
方法是从自身元素开始查找的,然后在 DOM 树中向上遍历,直到找到了所提供的表达式列表项 A。
我们可以指定一个 DOM 元素作为 context 来限定查找元素的范围。
var listItemII = document.getElementById('ii'); $('li.item-a').closest('ul', listItemII) .css('background-color', 'red'); $('li.item-a').closest('#one', listItemII) .css('background-color', 'green');
上述代码的结果会改变 level-2 <ul>
的颜色,因为它既是列表项 A 的第一个 <ul>
祖先元素也是列表项 II 的后代元素。但是并不会改变 level-1 <ul>
的元素,因为它不是列表项 II 的后代元素。
示例:
该例子展示了如何在事件代理中应用 closest。当点击列表项时,会切换显示列表项的背景色,使其变为黄色。
<!DOCTYPE html>
<html>
<head>
<style>
li { margin: 3px; padding: 3px; background: #EEEEEE; }
li.hilight { background: yellow; }
</style>
<script src="jquery.min.js"></script>
</head>
<body>
<ul>
<li><b>Click me!</b></li>
<li>You can also <b>Click me!</b></li>
</ul>
<script>
$( document ).bind("click", function( e ) {
$( e.target ).closest("li").toggleClass("hilight");
});
</script>
</body>
</html>
演示:
示例:
将一个 jQuery 对象传入 closest 中。当点击列表项时,会切换显示列表项的背景色,使其变为黄色。
<!DOCTYPE html>
<html>
<head>
<style>
li { margin: 3px; padding: 3px; background: #EEEEEE; }
li.hilight { background: yellow; }
</style>
<script src="jquery.min.js"></script>
</head>
<body>
<ul>
<li><b>Click me!</b></li>
<li>You can also <b>Click me!</b></li>
</ul>
<script>
var $listElements = $("li").css("color", "blue");
$( document ).bind("click", function( e ) {
$( e.target ).closest( $listElements ).toggleClass("hilight");
});
</script>
</body>
</html>