2009-03-30 9 views
42

次のHTMLを考えてみましょう。私は<ボタン>要素にJSONの参照を持っている場合は、どのように私は両方のケースで、外側<TR>要素への参照を取得することができます特定の親要素を見つけるためのjQueryセレクタ/メソッドがありますか?

<table id="my-table"> 
    <tr> 
     <td> 
      <button>Foo</button> 
     </td> 
     <td> 
      <div> 
       <button>Bar</button> 
      </div> 
     </td> 
    </tr> 
</table> 

<script type="text/js"> 
    $('#table button').click(function(){ 
     //$(this).parent().parent() will work for the first row 
     //$(this).parent().parent().parent() will work for the second row 
     //is there a selector or some magic json one liner that will climb 
     //the DOM tree until it hits a TR, or do I have to code this myself 
     //each time?    
     //$(this).???? 
    }); 
</script> 

私は各条件特殊なケースをできたけど、私はもっとです興味がある "しかし、深いあなたは、あなたが要素X"スタイルの解決策を見つけるまでツリーに登る。このような何かが、よりjQueryのあまり冗長

var climb = function(node, str_rule){ 
    if($(node).is(str_rule)){ 
     return node; 
    } 
    else if($(node).is('body')){ 
     return false; 
    } 
    else{ 
     return climb(node.parentNode, str_rule); 
    } 
}; 

/のような私は親(expr)は方法を知っているが、私は見てきたものからですが、あなたがするまで、木登り両親を1つのレベルアップをフィルタリングおよびNOTできますあなたは式exprを見つける(私は私が間違った証明コード例をみたい)

答えて

85

parents機能が欲しいものを行います。

$(this).parents("tr:first"); 
+8

あなたがないことを望みます私はドキュメントへのリンクを追加しました。 –

+3

絶対に、ありがとう!それは「他の人の投稿を編集する」権限があることです) – Seb

+1

Ha、それは面白いです。私はなぜVisual jQueryがparent(expr)を2回リストしたのか疑問に思った。私は最後にsを完全に間隔を置いていることが分かります。 –

39

また、あなたはclosest方法

を使用することができます1.3以降のjQueryを使用している場合、
$(this).closest("tr"); 
+4

ちょうど 'closest'と' parents'は非常に似ているが少し違いがあると付け加えたい。もっと読む[ここ](http://api.jquery.com/closest/#entry-longdesc)を読むことができます。全体として、私は、この特定のシナリオでは 'closest'メソッドがより効率的だと思います。 – aug

+0

ええ、この関数名を理解するのはとても簡単です。 –

関連する問題