.closest()
現在の要素を含み、そこからDOMツリーを遡って指定したセレクターにマッチする最初の要素を選択します。
- .closest( selector ) 1.3追加
- .closest( selector [, context] ) 1.4追加
- .closest( jQuery object ) 1.6追加
- .closest( element ) 1.6追加
- .closest( selectors [, context] ) 1.4追加 1.7非推奨 1.8削除
- 補足事項
- デモ
.closest( selector ) 1.3追加
戻り値:jQuery
引数 | 説明 |
---|---|
selector | マッチさせる要素をセレクタで指定します。 |
.closest( selector [, context] ) 1.4追加
戻り値:jQuery
引数 | 説明 |
---|---|
selector | マッチさせる要素をセレクタで指定します。 |
context | セレクタが検索するDocument内の範囲を絞り込む指定をします。 |
.closest( jQuery object ) 1.6追加
戻り値:jQuery
引数 | 説明 |
---|---|
jQuery object | マッチさせる要素をjQueryオブジェクトで指定します。 |
.closest( element ) 1.6追加
戻り値:jQuery
引数 | 説明 |
---|---|
elements | マッチさせる要素をDOM要素で指定します。 |
.closest( selectors [, context] ) 1.4追加 1.7非推奨 1.8削除
戻り値:Array
引数 | 説明 |
---|---|
selectors | マッチさせる要素をセレクタ(またはjQueryオブジェクト)の配列で指定します。 |
context | セレクタが検索するDocument内の範囲を絞り込む指定をします。 |
jQuery1.7からはこのメソッド(配列を戻り値とするclosest)の使用は非推奨になっています。 jQuery内部での使用、またはプラグイン製作者のみが使用することを前提としています。
補足事項
.closest()と.parents()の違いは下記のようになります。
項目 | 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>
下記のコードを実行すると、遡って最初に合致する'ul'はlevel-2のUL要素であるため、 その要素の背景が赤になります。
$('li.item-a').closest('ul').css('background-color', 'red');
デモ
Document内の要素をクリックすると、その要素から遡って最初に見つかったLI要素の背景を黄色に変更します。
<!DOCTYPE html>
<html>
<head>
<style>
li { margin: 3px; padding: 3px; background: #EEEEEE; }
li.hilight { background: yellow; }
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<ul>
<li><b>クリックしてください</b></li>
<li>こちらも <b>クリックしてください</b></li>
</ul>
<script>
$( document ).bind("click", function( e ) {
$( e.target ).closest("li").toggleClass("hilight");
});
</script>
</body>
</html>
第2引数contextを使用した例です。
<!DOCTYPE html>
<html>
<head>
<style>
body {font-size:12px;}
li { margin: 2px; padding: 2px; background: #EEEEEE; }
li.hilight { background: yellow; }
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<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>
<script>
var listItemII = document.getElementById('ii');
//level-2のUL要素にマッチ
$('li.item-a').closest('ul', listItemII)
.css('background-color', 'red');
//#oneはlistItemIIより上の階層に存在するため、マッチなし
$('li.item-a').closest('#one', listItemII)
.css('background-color', 'green');
</script>
</body>
</html>
© 2010 - 2017 STUDIO KINGDOM