2010-02-23 172 views
43

Hago clic en un enlace en una celda de tabla. Necesito obtener el valor de una celda específica dentro de esta misma fila de la tabla.jQuery - Obtener el valor de texto de una celda de tabla en la misma fila que un elemento cliquete

<tr> 
    <td class="one">this</td> 
    <td class="two">that</td> 
    <td class="three">here</td> 
    <td class="four"><a href="#">there</a></td> 
</tr> 
<tr> 
    <td class="one">qwqw</td> 
    <td class="two">dfgh</td> 
    <td class="three">ui</td> 
<td class="four"><a href="#">there</a></td> 
</tr> 

Tengo un controlador de clic conectado al enlace en la cuarta celda. Ese controlador de clic llama a una función que abre una ventana modal. Cuando se envía un formulario en el modal, también quiero pasar el valor de td class = "two" de la fila en la que se hizo clic en el enlace a este modal.

Aquí es la función que envía el modal (el área del problema es obtener el valor correcto para Algo var):

var Send = function() { 
    var Name = $('#name').val(); 
    var Something = $(this).closest('td').siblings('.two').text(); // version 1. doesn't work 
    var Something = $(this).closest('tr').siblings('td.two').text(); // version 2 also doesn't work 
    var Something = $(this).attr('class'); // version 3. just a test but also doesn't work 
    $.ajax({ 
     async: false, 
     data: { name: Name, somedata: Something }, 
     type: 'POST', 
     url: the url 
    });   
}; 

El problema es que no puedo obtener el valor correcto para algo. Debería ser el valor de td class = two en la misma fila que el elemento cliqueado.

La forma en que todo esto se une. Haga clic en el enlace de destino, que llama a un método llamado Send_Click(). Send_Click realiza algunas validaciones y luego llama a Send() pero el valor de Something nunca se rellena. ¿Esto es porque this no es lo que estoy pensando que es? Hjelp!

+0

Heres buen artículo http://codepedia.info/jquery-get-table-cell-td-value-div –

Respuesta

66

¿Quieres .children() lugar (documentation here):

$(this).closest('tr').children('td.two').text(); 
+0

¿Cómo puedo usar algo como el suyo para mi pregunta aquí: http://stackoverflow.com/questions/26004056/how-to-retrieve-the-tr-data-on-the-same-row-within-gridview-using -jquery-modal-w (Tengo un enlace en la misma fila y visualizo algunos datos de otra columna en la misma fila. – SearchForKnowledge

4

esta manera puede utilizar parent() para llegar a la tr padres y luego utilizar la función Buscar para recoger el TD con la clase dos

var Something = $(this).parent().find(".two").html();

o

var Something = $(this).parent().parent().find(".two").html();

utilizan tanto como parent() cualquiera que sea la profundidad del objeto cliqueado de acuerdo a la fila tr

esperanza que esto funciona ...

+0

Publique comentarios como comen ts. No como respuestas – Sampson

+0

lo siento, soy novato aquí ... –

+0

No paso nada por mí, Yasin. Aprecio el consejo (y lo voté de vuelta). – Stuart

58

Nick tiene la respuesta correcta, pero yo quería añadir que también podría obtener los datos de la celda sin necesidad del nombre de la clase

var Something = $(this).closest('tr').find('td:eq(1)').text(); 

:eq(#) tiene un índice basado en cero (link).

+0

¿Cómo puedo usar algo como el tuyo para mi pregunta aquí: http://stackoverflow.com/questions/26004056/how-to-retrieve-the-tr-data-on-the-same-row-within-gridview-using -jquery-modal-w (Tengo un enlace en la misma fila y visualizo algunos datos de otra columna en la misma fila. – SearchForKnowledge

+0

Estaba buscando esto, funciona muy bien con jQuery Mobile, gracias! – saman0suke

+0

Muchas gracias. Tu código oscila –

5

que debería funcionar bien:

var Something = $(this).children("td:nth-child(n)").text(); 
+0

¿Cómo puedo usar algo como el tuyo para mi pregunta aquí: http://stackoverflow.com/questions/26004056/how-to-retrieve-the-tr-data-on-the-same -row-within-gridview-using-jquery-modal-w (Tengo un enlace en la misma fila y visualizo algunos datos de otra columna en la misma fila. – SearchForKnowledge

4

Esto también funciona

$(this).parent().parent().find('td').text() 
Cuestiones relacionadas