Pensé que había algo en jquery que te permitía retroceder a través de una cadena.
Quiero hacer esto:
var a = $(this).parent().addClass('test').goBackToParent().children('selectorHere').text()Quiero obtener el padre del objeto que tengo y agregarle un nombre de clase. Una vez que haga eso, quiero revisar sus elementos secundarios y encontrar un elemento secundario que coincida con mi selector y obtener su texto.
¿Puedo hacer esto, o tengo que hacer esto en su lugar:
$(this).parent().addClass('test'); var a = $(this).parent().children('selectorHere').text()Editar
Estoy usando "fin" ahora pero no funciona. Hice un ejemplo que puedes probar aquí .
<table> <th> <tr>one</tr> <tr>two</tr> </th> <tr> <td id="test"><a href="#"><img src="http://ais.web.cern.ch/ais/apps/hrt/SMT%20v2/Images/btnbar_edit.png" /></a></td> <td class="selectMe">1</td> </tr> </table> $(function() { $('#test').click(function() { // does not work var a = $(this).parent().addClass('afb') .end().children('.selectMe').text(); // works var b = $(this).parent().children('.selectMe').text(); alert(a + ' -should have value'); alert(b + ' -works'); return false; }); });Estás buscando el método end() :
var a = $(this).parent().addClass('test').end() .children('selectorHere').text();El método:
Finaliza la operación de filtrado más reciente en la cadena actual y devuelve el conjunto de elementos coincidentes a su estado anterior.
Actualización : según su fragmento de html, ¡en realidad no necesita end en absoluto! Lo importante de jQuery es que la mayoría de los métodos no transversales devuelven una copia de sí mismos, por lo que si llama a $(this).addClass('test'), obtiene una copia de $(this) de vuelta.
Así que para tu fragmento:
// does not work var a = $(this) // points at #test .parent() // now refers to the tr which holds test .addClass('afb') // still refers to the tr .end() // now we're back to #test .children('.selectMe') // empty! there are no direct children of #test which match .selectMe .text(); // emptyEn su lugar, inténtelo sin el final:
// works var a = $(this) // points at #test .parent() // now refers to the tr which holds test .addClass('afb') // still refers to the tr .children('.selectMe') // found the .selectMe td .text(); // returns '1'Está buscando el método end() . Simplemente utilícelo en lugar de goBackToParent() .
La mayoría de los métodos transversales de DOM de jQuery operan en una instancia de objeto jQuery y producen una nueva, que coincide con un conjunto diferente de elementos DOM. Cuando esto sucede, es como si el nuevo conjunto de elementos se colocara en una pila que se mantiene dentro del objeto. Cada método de filtrado sucesivo empuja un nuevo conjunto de elementos a la pila. Si necesitamos un conjunto de elementos más antiguo, podemos usar end() para sacar los conjuntos de la pila.