2010-05-28 23 views
23

Estoy tratando de obtener el valor de la primera td en cada punto cuando un usuario hace clic en "hacer clic".Jquery: obtenga el valor de la primera td en la tabla

El resultado siguiente arrojará aa, ee o ii. Estaba pensando en usar el más cercano ('tr') .. pero siempre sale como "objeto Object". No estoy seguro de qué hacer en este caso.

Mi html es

<table> 
<tr> 
    <td>aa</td> 
    <td>bb</td> 
    <td>cc</td> 
    <td>dd</td> 
    <td><a href="#" class="hit">click</a></td> 

</tr> 
<tr> 
    <td>ee</td> 
    <td>ff</td> 
    <td>gg</td> 
    <td>hh</td> 
    <td><a href="#" class="hit">click</a></td> 
</tr> 
<tr> 
    <td>ii</td> 
    <td>jj</td> 
    <td>kk</td> 
    <td>ll</td> 
    <td><a href="#" class="hit">click</a></td> 
</tr> 

</table> 

Jquery

$(".hit").click(function(){ 

var value=$(this).// not sure what to do here 

alert(value) ; 

}); 

Respuesta

53
$(this).parent().siblings(":first").text() 

parent le da la <td> alrededor del enlace,

siblings da todas las etiquetas en <td> que <tr>,

:first da el primer elemento coincidente en el conjunto.

text() da el contenido de la etiqueta.

33

Esto debería funcionar:

$(".hit").click(function(){  
    var value=$(this).closest('tr').children('td:first').text(); 
    alert(value);  
}); 

Explicación:

  • .closest('tr') obtiene el antepasado más cercana que es un elemento <tr> (por lo que en este caso la fila donde el elemento <a> está en)
  • .children('td:first') obtiene todos los elementos secundarios de este elemento, pero con el selector :first lo reducimos al primer elemento <td>.
  • .text() obtiene el texto dentro del elemento

Como se puede ver en las otras respuestas, no es más que una sola manera de hacer esto.

+0

Todos ustedes dar respuestas correctas! Como ya tienes 16K y Tesserex me respondió primero. Daré la respuesta aceptada a Tesserex. ¡Muchas gracias! +1 a todos. – FlyingCat

+0

".children ('td: first')" justo lo que necesitaba. – radbyx

3

Instale Firebug y use console.log en lugar de alert. Luego verá el elemento exacto al que accede.

4
$(".hit").click(function(){ 
    var values = []; 
    var table = $(this).closest("table"); 
    table.find("tr").each(function() { 
     values.push($(this).find("td:first").html()); 
    }); 

    alert(values);  
}); 

Debe evitar $(".hit") es realmente ineficiente. Intenta usar la delegación de eventos en su lugar.

+0

Creo que el OP quiere obtener el valor de la primera celda en la fila actual, no en todas las filas. –

9

En el caso específico anterior, podría hacer malabarismos entre padres e hijos.

$(this).parents("tr").children("td:first").text() 
+0

'más cercano' solo busca antepasados ​​del elemento actual. Tu segundo ejemplo no funcionaría. Y su primer ejemplo tampoco funciona porque 'parent()' solo se cruza en el nivel superior en la jerarquía DOM (quizás se refiera a 'parents()'). –

+0

Editado para corrección. – Inaimathi

2

Si usted necesita para obtener todos los de TD interna Tr sin definir Identificación de ellos, se puede usar el siguiente código:

var items = new Array(); 

$('#TABLE_ID td:nth-child(1)').each(function() { 
     items.push($(this).html()); 
}); 

El código anterior se sumarán todas las primeras células dentro de la tabla en una matriz variable.

puede cambiar nth-child (1) lo que significa la primera celda para cualquier número de celda que necesite.

Esperamos que este código te ayude.

0

obtener el primer valor de td td última clic en la tabla

$(this).parent().siblings(":first").text() 
Cuestiones relacionadas