2011-03-15 16 views
16

Pensé que había algo en jquery que te permitía retroceder a través de una cadena.¿Cómo se retrocede en una cadena usando Jquery?

Quiero hacer esto:

var a = $(this).parent().addClass('test').goBackToParent().children('selectorHere').text() 

que desea obtener el padre del objeto que tengo y agregar un nombre de la clase a la misma. Una vez que hago eso, quiero revisar sus hijos y encontrar un hijo 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 se puede tratar here

<!DOCTYPE html> 
<html> 
<head> 
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<meta charset=utf-8 /> 
<title>JS Bin</title> 
<!--[if IE]> 
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> 
<![endif]--> 
<style> 
    article, aside, figure, footer, header, hgroup, 
    menu, nav, section { display: block; } 
</style> 
</head> 
<body> 
    <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> 
</body> 
</html> 


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

Respuesta

28

Usted está buscando el método end():

var a = $(this).parent().addClass('test').end() 
       .children('selectorHere').text(); 

El método:

Finaliza la última operación de filtrado en la cadena actual y devuelve el conjunto de elementos coincidentes a su estado anterior.

actualización: basado en el fragmento de HTML, que en realidad no es necesario 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).

Así que para su 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();    // empty 

su lugar, tratar sin 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' 
+0

extraño cuando hago esto no consigo un valor para el texto más. Si obtengo un paseo de addClass y al final lo hago. – chobo2

+0

Ayudaría si pudieras publicar un fragmento de html para que sepamos exactamente lo que estás tratando de manipular. Según su comentario, parece que el elemento 'selectorHere' es en realidad un hijo directo del padre (es decir, un hermano o $ (esto)), en lugar de un hijo de $ (esto) – Dexter

+0

acaba de agregar un ejemplo. – chobo2

7

Usted busca el método end(). Solo úsalo en lugar de goBackToParent().

La mayoría de los métodos de recorrido de DOM de jQuery operan en una instancia de objeto jQuery y producen una nueva, que coincide con una conjunto diferente de elementos DOM. Cuando sucede esto, es como si el nuevo conjunto de elementos se inserta en una pila que se mantiene dentro del objeto. Cada método de filtrado sucesivo empuja un nuevo conjunto de elementos en la pila . Si necesitamos un elemento antiguo establecido, podemos usar end() para hacer saltar los conjuntos de la pila.

Cuestiones relacionadas