¿Cómo obtener un valor de celda de tabla usando jQuery?


213

Estoy tratando de averiguar cómo obtener el valor de la celda de la tabla para cada fila usando jQuery.

Mi mesa se ve así:

<table id="mytable">
  <tr>
    <th>Customer Id</th>
    <th>Result</th>
  </tr>
  <tr>
    <td>123</td>
    <td></td>
  </tr>
  <tr>
    <td>456</td>
    <td></td>
  </tr>
  <tr>
    <td>789</td>
    <td></td>
  </tr>
</table>

Básicamente quiero recorrer la tabla y obtener el valor de la Customer Idcolumna para cada fila.

En el siguiente código, he deducido que necesito hacer esto para que se repita en cada fila, pero no estoy seguro de cómo obtener el valor de la primera celda de la fila.

$('#mytable tr').each(function() {
    var cutomerId = 
}

44
Aquí hay un tutorial completo con demostración en vivo sobre cómo obtener el valor de TD de celda de tabla codepedia.info/jquery-get-table-cell-td-value-div
Satinder singh

Respuestas:


306

Si puede, puede valer la pena usar un atributo de clase en el TD que contenga la ID del cliente para que pueda escribir:

$('#mytable tr').each(function() {
    var customerId = $(this).find(".customerIDCell").html();    
 });

Esencialmente, esto es lo mismo que las otras soluciones (posiblemente porque copié y pegué), pero tiene la ventaja de que no necesitará cambiar la estructura de su código si se mueve alrededor de las columnas, o incluso coloca la identificación del cliente en un <span>, siempre que mantenga el atributo de clase con él.

Por cierto, creo que podrías hacerlo en un selector:

$('#mytable .customerIDCell').each(function() {
  alert($(this).html());
});

Si eso facilita las cosas.


44
Yo diría $ ('# mytable td.customerIDCell'). Each (function () {alert ($ (this) .html ());}); pero +1
Matt Briggs

:-) gracias, pero ¿qué pasa si quieres ponerlo en un lapso (puedo haber formateado mal el lapso en mi respuesta!)
Jennifer

2
Usar la clase en el tr es especialmente útil si tienes <td> dentro de un <tfoot> (o estás usando <td> en lugar de <th>) y no quieres esos.
Frank Luke

$ ('# mytable tr'). each (function () {var customerId = $ (this) .find (". customerIDCell"). html ();});
Osama khodrog

pero si quiero obtener el tr html también, entonces qué podemos hacer
desarrollador

132
$('#mytable tr').each(function() {
    var customerId = $(this).find("td:first").html();    
});

Lo que está haciendo es iterar a través de todos los trs en la tabla, encontrar el primer td en el tr actual en el bucle y extraer su html interno.

Para seleccionar una celda en particular, puede hacer referencia a ellas con un índice:

$('#mytable tr').each(function() {
    var customerId = $(this).find("td").eq(2).html();    
});

En el código anterior, recuperaré el valor de la tercera fila (el índice está basado en cero, por lo que el índice de la primera celda sería 0)


Así es como puedes hacerlo sin jQuery:

var table = document.getElementById('mytable'), 
    rows = table.getElementsByTagName('tr'),
    i, j, cells, customerId;

for (i = 0, j = rows.length; i < j; ++i) {
    cells = rows[i].getElementsByTagName('td');
    if (!cells.length) {
        continue;
    }
    customerId = cells[0].innerHTML;
}


1
Gracias, esto fue más útil para mí ya que no tengo control sobre el marcado del documento que deseo analizar usando jQuery. Así que poder usar "td: first", "td: last", etc. fue de gran ayuda.
atomicules

1
eq (2) obtendría el valor de la tercera columna, no la tercera fila.
live-love

¿Qué es eq (2) en su código? Quiero decir 2 es el índice de qué td o tr?
TechnicalKalsa

@Singh El elemento en el índice 2 de la tdcolección devuelto por la find("td")función.
Andreas Grech

Me gusta la opción 2 con el índice como referencia, mi violín aquí
HattrickNZ

18

Un enfoque menos jquerish:

$('#mytable tr').each(function() {
    if (!this.rowIndex) return; // skip first row
    var customerId = this.cells[0].innerHTML;
});

esto obviamente se puede cambiar para que funcione con las celdas que no son las primeras.


8
$('#mytable tr').each(function() {
  // need this to skip the first row
  if ($(this).find("td:first").length > 0) {
    var cutomerId = $(this).find("td:first").html();
  }
});

2
No es necesario omitir la primera fila, ya que contiene <th>, no <td>, por lo que sus datos no se extraerán
Andreas Grech

7

Prueba esto,

$(document).ready(function(){
$(".items").delegate("tr.classname", "click", function(data){
            alert(data.target.innerHTML);//this will show the inner html
    alert($(this).find('td:eq(0)').html());//this will alert the value in the 1st column.
    });
});

1
del segundo elemento, no el primero, la ecuación comienza en 0
Claudiu Creanga

4

¿No usas id para esa columna? dilo:

    <table width="300" border="1">
          <tr>
            <td>first</td>
          </tr>
          <tr>
            <td>second</td>
          </tr> 
          <tr>
            <td>blah blah</td>
            <td>blah blah</td>
            <td id="result">Where the result should occur</td>
          </tr>
    </table>


<script type="text/javascript">
        $('#result').html("The result is....");
</script>

4

Esto funciona

$(document).ready(function() {
    for (var row = 0; row < 3; row++) {
        for (var col = 0; col < 3; col++) {
            $("#tbl").children().children()[row].children[col].innerHTML = "H!";
        }
    }
});

2

prueba esto :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>Untitled</title>

<script type="text/javascript"><!--

function getVal(e) {
    var targ;
    if (!e) var e = window.event;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;

    alert(targ.innerHTML);
}

onload = function() {
    var t = document.getElementById("main").getElementsByTagName("td");
    for ( var i = 0; i < t.length; i++ )
        t[i].onclick = getVal;
}

</script>



<body>

<table id="main"><tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
</tr><tr>
    <td>5</td>
    <td>6</td>
    <td>7</td>
    <td>8</td>
</tr><tr>
    <td>9</td>
    <td>10</td>
    <td>11</td>
    <td>12</td>
</tr></table>

</body>
</html>

2
$(document).ready(function() {
     var customerId
     $("#mytable td").click(function() {
     alert($(this).html());
     });
 });

2

Un ejemplo de trabajo: http://jsfiddle.net/0sgLbynd/

<table>
<tr>
    <td>0</td>
    <td class="ms-vb2">1</td>
    <td class="ms-vb2">2</td>
    <td class="ms-vb2">3</td>
    <td class="ms-vb2">4</td>
    <td class="ms-vb2">5</td>
    <td class="ms-vb2">6</td>
</tr>
</table>


$(document).ready(function () {
//alert("sss");
$("td").each(function () {
    //alert($(this).html());
    $(this).html("aaaaaaa");
});
});
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.