めちゃくちゃ便利。使用頻度高。
子要素を探す場合は.find()、親要素を探す場合はこの.closest()を使うと覚えておけば大抵の場合なんとかなるでしょうw
jQueryオブジェクトが持つ対象となるDOM要素からDOMツリーをさかのぼってselectorにマッチした最初のDOM要素をjQueryオブジェクトとして返す。
簡単に言うと対象から見てselectorにマッチする直近の親要素をかえす。
イベントターゲットから相対的に要素を特定できるので、イベント処理で大活躍。HTMLのマークアップがどうなってようが関係なく処理を実行できる。
サンプル
Javascript
$('.jqTest1 .execute').on('click', function(e){
alert($(e.target).closest('div.alertText').find('input.targetText').val());
});
$('.jqTest1 .add').on('click', function(e){
$(e.target).parent().append($('.jqTest1 .alertText:first').clone(true));
});
HTML
<div class="jqTest1">
<!-- 基本形 -->
<div class="alertText">
<input type="text" class="targetText" value="target" />
<button class="execute">Alert</button>
</div>
<div class="alertText">
<input type="text" class="targetText" value="target2" /><br />
<input type="text" class="data[name]" value="偽物ターゲット" />
<button class="execute">Alert</button><button>偽物ボタン</button>
</div>
<div class="wrap">
<div class="alertText">
<input type="text" class="targetText" value="beforeTarget" />
<div class="alertText">
<input type="text" class="targetText" value="target3" />
<button class="execute">Alert</button>
</div>
<button class="execute">Alert</button>
</div>
</div>
<div class="alertText">
<div class="form">
<div class="free">
<p>自由項目です。<input type="text" class="notTarget" value="notTarget" /></p>
</div>
<div class="need">
<p>必須の入力項目です。<input type="text" class="targetText" value="target" /></p>
</div>
<div>
<p>ボタンを押すとテキストを表示します<button class="execute">Alert</button></p>
</div>
</div>
</div>
<button class="add">追加</button>
</div>
CSS
.jqTest1 .alertText {
padding: 1em;
margin: 1em;
border: 1px solid #CCCCCC;
}
.jqTest1 .wrap {
background: #EEEFFF;
}
.closest( selector [, context] )
.closest( jQuery object )
.closest( element )
.closest( selectors [, context] )