15

私の JavaScript の経験では、「何らかの条件 (タグ名、クラスなど) で要素の最も近い祖先を検索する」という非常に一般的なタスクであることがわかりました。jqueryのparent()メソッドは仕事をすることができますか? parent() の返される要素の順序は予測可能ですか? 上から下ですか、それとも下から上ですか?今のところ、このユーティリティ関数を使用しています。

function ancestor(elem, selector) {
  var $elem = $( elem ).parent();
  while( $elem.size() > 0 ) {
    if( $elem.is( selector ) ) 
    return $elem;
    else
       $elem = $elem.parent();
  }
  return null;
}

仕事をする賢い方法があれば誰か教えてもらえますか?

4

4 に答える 4

21

編集:jQuery 1.3以降、これはclosest()関数として組み込まれています。例えば:$('#foo').closest('.bar');


はい -parent() はツリーを上に移動します。

<div id="a">
    <div id="b">
        <p id="c">
            <a id="d"></a>
        </p>
    </div>
</div>

$('#d').parents("div:first");div b を選択します。

于 2008-10-14T14:16:45.133 に答える
3

探している親が現在と同じタグを持っている場合 (たとえば、両方とも div)、parent().closest() を使用します。

于 2010-07-22T14:54:47.833 に答える
3

複数の要素を操作している場合、期待する結果が得られないclosestため、を使用する必要があります。parentsたとえば、これがあるとしましょう:

    <div id="0">
        <div id="1">test with <b>nested</b> divs.</div>
        <div id="2">another div.</div>
        <div id="3">yet <b>another</b> div.</div>
    </div>

<b>そして、直接の子として要素を持つ div にクラスを追加します(つまり、1 と 3)。を使用すると、div 0、1、および 3 が取得されます。 を$('b').parents('div')使用する$('b').parents('div:first')と、div 1 のみが取得されます。0 ではなく 1 と 3 を取得するには、 を使用する必要があります$('b').closest(elem)

于 2009-08-05T19:31:46.470 に答える