95 votes

jQuery each loop dans une ligne de tableau

J'ai quelque chose comme :

<table id="tblOne">
            <tbody>
                <tr>
                    <td>
                        <table id="tblTwo">
                            <tbody>
                                <tr>
                                    <td>
                                        Items
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        Prod
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                    </td>
                </tr>
                <tr>
                    <td>
                        Item 1
                    </td>
                </tr>
                <tr>
                    <td>
                        Item 2
                    </td>
                </tr>
            </tbody>
        </table>

J'ai écrit jQuery pour boucler chaque tr comme :

$('#tblOne tr').each(function() {...code...});

Mais le problème est qu'il passe en boucle par le "tr" de "tblTwo" également, ce que je ne veux pas. Quelqu'un peut-il me suggérer quelque chose pour résoudre ce problème ?

242voto

Fabrizio Calderan Points 43398

Dans jQuery, il suffit d'utiliser :

$('#tblOne > tbody  > tr').each(function() {...code...});

En utilisant le sélecteur d'enfants ( > ) vous marcherez sur tous les enfants (et non pas todos descendants), exemple avec trois rangées :

$('table > tbody  > tr').each(function(index, tr) { 
   console.log(index);
   console.log(tr);
});

Résultat :

0
<tr>
1 
<tr>
2
<tr>

En VanillaJS vous pouvez utiliser document.querySelectorAll() et parcourir les rangs en utilisant forEach()

[].forEach.call(document.querySelectorAll('#tblOne > tbody  > tr'), function(index, tr) {
    /* console.log(index); */
    /* console.log(tr); */
});

73voto

GNi33 Points 3110

Juste une recommandation :

Je recommande d'utiliser l'implémentation de la table DOM, elle est très directe et facile à utiliser, vous n'avez vraiment pas besoin de jQuery pour cette tâche.

var table = document.getElementById('tblOne');

var rowLength = table.rows.length;

for(var i=0; i<rowLength; i+=1){
  var row = table.rows[i];

  //your code goes here, looping over every row.
  //cells are accessed as easy

  var cellLength = row.cells.length;
  for(var y=0; y<cellLength; y+=1){
    var cell = row.cells[y];

    //do something with every cell here
  }
}

21voto

Sarfraz Points 168484

Utilisez sélecteur d'enfants immédiats > :

$('#tblOne > tbody  > tr')

Description : Sélectionne tous les éléments enfants directs spécifié par "child" de éléments spécifiés par "parent".

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