2009-05-27 36 views
5

estoy luchando con la forma de seleccionar un elemento en particular con jQuery. Condiciones descritas aquí:selección jQuery: atravesar hacia arriba, luego hacia abajo

  • En el punto relevante en mi función, this hace referencia a un span.
  • Eso span puede ser un niño, nieto o bisnieto niño, pero en algún lugar en la jerarquía, que está contenida por un td.
  • me gustaría para seleccionar el último span interior de la td.
  • El span puede ser this, o puede ser otro span.
  • Las etiquetas span que se seleccionarán son un hijo directo de la que contiene td, por lo que last-child es realizable. Sin embargo, para flexibilidad futura, se prefiere una solución que no asuma que es un niño directo.

Hasta el momento, estoy usando esta opción para seleccionar el elemento principal que corresponda:

$(this).parents('td') 

No sé cómo recorrer hacia abajo el árbol DOM para llegar a la final span interior del seleccionado td . ¡Gracias!

Editar

por mis comentarios a continuación, también sería bueno para seleccionar de una span o div, cualquiera que sea la última.

Respuesta

12
$(this).parents('td').children('span:last'); 

deberían hacer el truco.

Editar

no me di cuenta de su deseo de no sólo tratar a los niños inmediatos. Si desea que todos los descendientes, a continuación, se usaría

$(this).parents('td').find('span:last') 

que había asumido el span siempre habría un niño de la td.

edición final

Por el bien de la posteridad (y para que sea más fácil para las personas a encontrar esta respuesta en el futuro), puesto que esto ya fue aceptada como la respuesta, Ben se le ocurrió una solución más elegante en su respuesta que voy a poner aquí:

$(this).closest('td').find('div,span').filter(':last') 

Como dijo Ben, debe utilizar jQuery 1.3 para closest() para trabajar. ¡Buen trabajo!:-)

+0

children() solo busca niños inmediatos. –

4

La función que está buscando es find(expr), que busca en todos los nodos descendientes:

$(this).closest('td').find('span:last') 

Editar: para seleccionar el último div o span:

$(this).closest('td').find('div,span').filter(':last') 

Editar 2:Mark hace un excelente punto sobre el uso de closest() en lugar de parents(), pero tenga en cuenta que debe usar jQuery 1.3 para ello.

+0

Gracias! ¿Podemos modificar un poco más? ¿Qué pasaría si quisiera encontrar el último elemento, pero en lugar de limitarlo a span, podría ser un tramo o un div? –

+0

Puedes reemplazar span con cualquier elemento que desees. –

+0

Estoy hablando de un lapso O un div. Sintaxis inválida, pero algo como esto: $ (this) .parents ('td'). Filter ('input'). Find ('div, span: last') –

5

Prefiero usar closest en este caso, en su lugar parents. No tiene que preocuparse de que haya dos o más elementos 'td' en la ascendencia.

$(this).closest('td').children("span:last") 
Cuestiones relacionadas