2009-04-21 8 views
2

Je veux sélectionner uniquement le premier niveau d'éléments 'td' dans une table et non les cellules d'une table imbriquée. par exemple:Comment sélectionner des cellules de tableau sans sélectionner de cellules de tableau imbriquées dans jQuery

<table id="Outer"> 
    <tr> 

     <td> --this one 
     </td> 

     <td> --this one 
      <table> 
       <tr> 
        <td></td> -- but not this one or any deeper nested cells 
       </tr> 
      </table> 
     </td> 

    </tr> 
</table> 

(et oui dans le code prod i inclurais tbody, thead ...)

Répondre

10

Je d utilisez le sélecteur children, qui sélectionne uniquement les enfants immédiats correspondant à l'expression. Pour faciliter la sélection de la table externe, je lui donnerais un nom. NOTE: cela ne fonctionnera pas avec votre échantillon car j'ai ajouté dans les sélecteurs pour thead, tbody, et tfoot comme vous indiquez que vous aurez en production. Ajustez en conséquence pour votre échantillon.

$('table#namedTable').children('tbody,thead,tfoot') 
        .children('tr') 
        .children('td') 
+0

parfait, merci! – rizzle

+0

curieusement le navigateur a automatiquement ajouté tbody (FireFox) et donc le code a fonctionné même si je n'ai pas tbody dans la source. – rizzle

+0

+1, excellente réponse - Au premier abord, ce problème semble assez trivial, mais ce n'est pas le cas. – karim79

0

Donnez la table la plus externe un id de "extérieur":

$("table#Outer > td").text("selected"); 
+0

ne semble pas fonctionner pour moi – rizzle

+0

TD n'est pas un enfant immédiat d'une table. – tvanfosson

+0

vous devez faire $ ("table # Outer> tbody> tr> td"). Text ("selected"); même si je n'ai pas tbody dans ma source le navigateur semble le mettre automatiquement (FF3) – rizzle

Questions connexes