2012-04-25 26 views
8

Im tratando de orientar un elemento dentro de mi LI solo estoy teniendo problemas, he leído la documentación de jQuery pero no puedo entender qué estoy haciendo mal?Encontrar elemento dentro del contenedor principal con jQuery

En un evento de clic Quiero encontrar un elemento y alterar el código HTML dentro ...

http://jsfiddle.net/68ePW/3/

<li> 
    <h2>400</h2> 
    <form> 
     <input type='submit' class='click' value='send'>     
    </form> 
</li> 

$('.click').click(function(){ 
    $(this).parent('li').closest('h4').html('asdasd'); 
}); 
+1

¿Qué elemento? ¿Y qué hacer con eso? Muestre su código ** aquí **, JS Fiddle es un buen extra, pero sus preguntas deberían tener sentido y conservar su utilidad, sin depender de sitios externos. –

+0

Creo que quiso utilizar 'h2' como el parámetro para el más cercano() – Christian

+1

'$ (this) .closest ('li'). Find ('h2')'? – zerkms

Respuesta

19

Basado en el código HTML siguiente (tenga en cuenta que tenía que envolver el li con la ul, ya que un regalo sin envolver li es inválida HTML):

<ul> 
    <li> 
     <h2>400</h2> 
     <form> 
      <input type='submit' class='click' value='send'>     
     </form> 
    </li>  
</ul>​​​​​​​​​​​​​​​​​​ 

Y la siguiente jQuery:

$('.click').click(function(){ 
    $(this).parent('li').closest('h4').html('asdasd'); 
}); 

Parece que está tratando de encontrar la h4 dentro del li. Los problemas que tiene son múltiples:

  1. El uso de parent() solo busca el elemento principal inmediato del elemento actual; closest() utilizar en su lugar, para buscar a través de los antepasados ​​ hasta que encuentra un elemento coincidente,
  2. closest() (como se mencionó) mira hacia arriba a través de los elementos antecesores, mientras que usted está tratando de encontrar un elemento entre los descendientes de la li elemento. Use find(),
  3. Usted busca un elemento h4, que no existe. Necesitabas (supongo) encontrar el h2 que estaba presente en el DOM.

Así:

$('.click').click(function(){ 
    $(this).closest('li').find('h2').html('asdasd'); 
}); 

JS Fiddle demo.

Referencias:

+0

Gracias @David Thomas, veo que funciona en jsfiddle solo que no en mi sitio real, en la página carga el formulario se muestra inicialmente: ninguno y solo se vuelve visible cuando un botón alternar su vista se hace clic, ¿podría ser esta la razón? – Liam

+0

No lo sé; para responder que tendríamos que ver su sitio, y tener alguna idea de lo que está pasando allí. –

+4

"Veo que funciona en jsfiddle, pero no en mi sitio real" --- y ahora ** su ** trabajo es para que funcione. Estamos aquí para tener la idea de cómo hacer eso, no para hacer todo por usted. – zerkms

Cuestiones relacionadas