Comment obtenir uniquement les éléments enfants directs par la fonction jQuery


90

J'ai une structure de table comme celle-ci:

<table1>
  <tbody>
    <tr>
      <td></td>
        ...
      <td>
        <table2>
          <tbody>
            <tr>
              <td></td>
            </tr>
          </tbody>
        </table>
      </td>
    </tr>
   </tbody>
  </table>

En javascript, j'ai une variable tblavec la valeur de $(table1), puis je veux obtenir tous les éléments enfants directs (tr) de <tbody>of table1. Mon code est:

$('tr', tb1)

Apparemment, il renvoie tous les <tr>éléments de table1 et table2. Je pense que je peux m'en sortir

$('tr', tb1).not(function(){return $(this).parent().parent()[0] != tb1;})

ou ce genre de logique.

Je sais que je $('table1 > tbody > tr')peux obtenir l'enfant direct tr. Malheureusement, je ne peux pas utiliser cela.

Quelqu'un a une bonne idée à ce sujet?

Merci.

Réponses:


179

Vous pouvez utiliser find():

tbl.find("> tbody > tr")


2
c'est une idée géniale. $ ('> tbody> tr', tb1) fonctionne aussi pour moi. Merci.
Jason Li

1
C'est merveilleux, je ne savais pas que vous pouviez utiliser le sélecteur direct d'enfant ( >) sans rien spécifier devant lui. Merci.
Silkfire

3
Notez que pour les enfants directs qui ne sont qu'à un niveau plus bas, vous pouvez simplement utiliser 'children ([selector])'.
orad

37
DIRECT CHILDREN = un niveau en bas des enfants , donc api.jquery.com/children est la bonne réponse, pas find () - que l'on obtient TOUS les descendants de l'élément (filtré par sélecteur) ...
jave.web

4
Vous devriez faire de votre commentaire une réponse séparée jave.web car la vôtre est LA bonne réponse.
mrmillsy

23

Comme @ jave.web mentionné dans les commentaires

Pour rechercher parmi les enfants directs d'un élément, utilisez .children(). Il ne cherchera qu'à travers les enfants directs et ne traversera pas plus profondément. http://api.jquery.com/children/


5

C'est exactement la raison pour laquelle il faut être prudent avec les tables gigognes. J'espère vraiment que vous les utiliserez pour les données et non pour la mise en page.

Un autre problème qui gâchera probablement votre journée est l'utilisation de sélecteurs CSS sur les tables imbriquées ... vous avez fondamentalement le même problème - vous ne pouvez pas sélectionner les éléments TR de la table externe sans sélectionner ceux à l'intérieur de la table interne, aussi. (Vous ne pouvez pas utiliser le sélecteur enfant car il n'est pas implémenté dans IE6)

Cela devrait fonctionner:

$("#table1 > tbody > tr")

Cependant, je vous recommande de coder en dur l'élément TBODY, car vous ne devez pas vous fier au navigateur pour le créer pour vous.



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.