2009-03-30 19 views
42

Considere el siguiente HTML. Si tengo una referencia al elemento JSON botón < >, ¿cómo puedo obtener una referencia a la <tr> elemento exterior en ambos casos¿Hay un selector/método de jQuery para encontrar un elemento principal específico n niveles arriba?

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

sé que pude caso especial cada condición, pero estoy más interesado "por más profundo que sea, suba al árbol hasta que encuentre la solución de estilo del elemento X". Algo como esto, pero más como jQuery/menos verbosa

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

que sé sobre el método de matriz (expr), pero por lo que he visto es que permite filtrar los padres de una sola planta y se suba al árbol hasta a encontrar expr (me encantaría ejemplo de código me demostrando mal)

Respuesta

85

la función parents hace lo que quiere:

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

espero que no mente, agregué un enlace a la documentación. –

+3

¡Absolutamente, gracias! Para eso sirve el permiso "Editar publicaciones de otras personas";) – Seb

+1

Ja, eso es gracioso. Me pregunté por qué Visual jQuery enumeró parent (expr) dos veces; Resulta que espacié totalmente la s al final. –

39

Además, si usted está usando jQuery 1.3+ puede utilizar el método closest

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

Solo quería agregar que 'closer' y' parents' son muy similares pero tienen una pequeña diferencia. Puede leer más [aquí] (http://api.jquery.com/closest/#entry-longdesc). En general, creo que el método 'más cercano' es más eficiente para este escenario específico. – aug

+0

hmm, muy fácil de entender este nombre de función. –

Cuestiones relacionadas