2009-03-30 4 views
42

Betrachten Sie das folgende HTML. Wenn ich eine JSON Verweis auf die < Schaltfläche > Element haben, wie kann ich erhalten einen Verweis auf die äußere <tr> Element in beiden FällenGibt es einen jQuery-Selektor/eine Methode, um ein bestimmtes Elternelement zu finden?

<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> 

Ich weiß, ich könnte Sonderfall jede Bedingung, aber ich bin mehr interessiert "wie tief Sie auch sind, klettern Sie den Baum, bis Sie Element X" Stil Lösung finden. So etwas wie dies, aber jQuery wie/weniger ausführliche

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); 
    } 
}; 

Ich weiß um die Eltern (expr) -Methode, aber von dem, was ich gesehen habe, ist erlaubt Ihnen, den Eltern eine Ebene nach oben filtern und klettern den Baum nicht bis Sie finden ausdr (ich würde Codebeispiel lieben mich nicht falsch erweisen)

Antwort

85

die parents Funktion tut, was Sie wollen:

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

Sie Hoffnung nicht Ich habe einen Link zur Dokumentation hinzugefügt. –

+3

Absolut, danke! Das ist, was "Edit Beiträge anderer Leute" ist für;) – Seb

+1

Ha, das ist lustig. Ich habe mich gefragt, warum Visual jQuery Eltern (expr) zweimal aufgelistet hat; Es stellt sich heraus, dass ich die s am Ende total beabstandet habe. –

39

auch wenn Sie jQuery verwenden 1.3+ Sie die closest Methode können

$(this).closest("tr"); 
+4

Ich wollte nur hinzufügen, dass 'engste' und' eltern' sehr ähnlich sind, aber einen kleinen Unterschied haben. Sie können mehr [hier] lesen (http://api.jquery.com/closes/#entry-longdesc). Insgesamt denke ich, dass die "engste" Methode für dieses spezifische Szenario effizienter ist. – aug

+0

hmm, sehr einfach diesen Funktionsnamen zu verstehen. –