たとえば、要素の第3レベルの親を取得する場合、$('#element').parent().parent().parent()
と記述する必要があります。これに最適な方法はありますか?
必要に応じて、探している親がわかっている場合は、.parents()セレクターを使用できます。
E.G: http://jsfiddle.net/HenryGarle/Kyp5g/2/
<div id="One">
<div id="Two">
<div id="Three">
<div id="Four">
</div>
</div>
</div>
</div>
var top = $("#Four").parents("#One");
alert($(top).html());
インデックスを使用した例:
//First parent - 2 levels up from #Four
// I.e Selects div#One
var topTwo = $("#Four").parents().eq(2);
alert($(topTwo ).html());
より高速な方法は、javascriptを直接使用することです。
var parent = $(innerdiv.get(0).parentNode.parentNode.parentNode);
これは、jQuery .parent()
呼び出しをチェーンするよりも、ブラウザー上で非常に高速に実行されます。
ターゲットの親にidまたはクラス(myParentなど)を与えることができ、参照は$('#element').parents(".myParent")
で行われます
共通の親divがある場合は、parentsUntil() link を使用できます
例:$('#element').parentsUntil('.commonClass')
利点は、この要素と共通の親(commonclassで定義)の間に何世代あるかを覚えておく必要がないことです。
この機能の再利用を計画している場合、最適なソリューションはjQueryプラグインを作成することです。
(function($){
$.fn.nthParent = function(n){
var $p = $(this);
while ( n-- >= 0 )
{
$p = $p.parent();
}
return $p;
};
}(jQuery));
もちろん、オプションのセレクターなどを許可するように拡張することもできます。
注:これは親に対して0
ベースのインデックスを使用するため、nthParent(0)
はparent()
を呼び出すのと同じです。 1
ベースのインデックスを作成する場合は、n-- > 0
を使用します
closest()
を使用して回答が見つからなかったため、必要な要素のレベル数がわからない場合に最も簡単な回答だと思うので、回答を投稿します。closest()
関数をセレクターと組み合わせて使用すると、要素から上に移動するときに一致する最初の要素を取得できます。
('#element').closest('div') // returns the innermost 'div' in its parents
('#element').closest('.container') // returns innermost element with 'container' class among parents
('#element').closest('#foo') // returns the closest parent with id 'foo'
それは簡単です。使うだけ
$(selector).parents().eq(0);
0は親レベルです(0は親、1は親の親など)
以下も使用できます。
$(this).ancestors().eq(n)
例:$(this).ancestors().eq(2)
-> this
の親の親。
次のように:eq()
セレクターを追加するだけです:
$("#element").parents(":eq(2)")
どの親をインデックスに指定するか:0は直接の親、1は祖父母、...
次のようなものを使用できます。
(function($) {
$.fn.parentNth = function(n) {
var el = $(this);
for(var i = 0; i < n; i++)
el = el.parent();
return el;
};
})(jQuery);
alert($("#foo").parentNth(2).attr("id"));
parents() はリストを返すため、これも機能します
$('#element').parents()[3];
eqを使用すると、動的DOMを取得するように見えますが、.parent()。parent()を使用すると、最初にロードされたDOMを取得するように見えます(可能な場合)。
Onmouseoverにクラスが適用される要素で両方を使用します。 eqはクラスを表示しますが、.parent()。parent()は表示しません。