235 votes

Comment obtenir la valeur d'une cellule de tableau à l'aide de jQuery ?

J'essaie de trouver comment obtenir la valeur d'une cellule de tableau pour chaque ligne en utilisant jQuery.

Ma table ressemble à ceci :

<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>

En gros, je veux boucler le tableau et obtenir la valeur de l'élément Customer Id pour chaque ligne.

Dans le code ci-dessous, j'ai compris que je devais faire cela pour que la boucle passe par chaque ligne, mais je ne sais pas comment obtenir la valeur de la première cellule de la ligne.

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

339voto

Jennifer Points 2603

Si vous le pouvez, il peut être intéressant d'utiliser un attribut de classe sur le TD contenant l'ID du client afin de pouvoir écrire :

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

C'est essentiellement la même chose que les autres solutions (peut-être parce que j'ai fait un copier-coller), mais elle a l'avantage que vous n'aurez pas besoin de modifier la structure de votre code si vous déplacez les colonnes, ou même si vous mettez l'ID du client dans un fichier de type <span> à condition de conserver l'attribut de classe.

D'ailleurs, je pense que vous pourriez le faire en un seul sélecteur :

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

Si cela rend les choses plus faciles.

4 votes

Je dirais $('#mytable td.customerIDCell').each(function() { alert($(this).html()) ; }) ; mais +1

0 votes

:-) merci - mais que faire si vous voulez le mettre dans un span (j'ai peut-être mal formaté le span dans ma réponse !)

2 votes

L'utilisation de la classe sur le tr est particulièrement utile si vous avez des <td> à l'intérieur d'un <tfoot> (ou si vous utilisez <td> au lieu de <th>) et que vous n'en voulez pas.

159voto

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

Ce que vous faites est d'itérer à travers tous les trs dans la table, trouver le premier td dans le tr actuel dans la boucle, et extraire son html interne.

Pour sélectionner une cellule particulière, vous pouvez la référencer avec un index :

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

Dans le code ci-dessus, je vais récupérer la valeur de l'objet troisième rangée (l'index est basé sur zéro, donc le premier index de cellule serait 0)


Voici comment vous pouvez le faire sans 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 votes

Merci, cela m'a été plus utile car je n'ai pas le contrôle sur le balisage du document que je souhaite analyser en utilisant jQuery. Le fait de pouvoir utiliser "td:first", "td:last", etc. m'a donc beaucoup aidé.

1 votes

Eq(2) obtiendrait la valeur de la troisième colonne, et non de la troisième ligne.

0 votes

Que signifie eq(2) dans votre code ? Je veux dire que 2 est l'index de quel td ou tr ?

22voto

Jimmy Points 35501

Une approche moins farfelue :

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

il est évidemment possible de le modifier pour qu'il fonctionne avec des cellules qui ne sont pas les premières.

9voto

Strelok Points 18453
$('#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 votes

Il n'est pas nécessaire de sauter la première ligne, car elle contient des <th>, et non des <td>, et leurs données ne seront donc pas extraites.

8voto

Nikhil Dinesh Points 1412

Essayez ça,

$(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 votes

Du deuxième élément, pas du premier, eq commence à 0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X