2010-08-17 5 views
0
<table> 
    <tbody> 
     <tr> 
    <td class="TargetRow">Not this one</td> 
     </tr> 
    </tbody> 
    <tbody> ... </tbody> 
    <tbody> 
     <tr> 
    <td class="TargetRow">This one</td> 
     </tr> 
    </tbody> 
    <tbody> ... </tbody> 
    <tbody> 
     <tr class="ContextRow"> ... </tr> 
    </tbody> 
</table> 

avec le code HTML ci-dessus, je suis en train de trouver un moyen d'obtenir le contenu du précédent tr de classe TargetRow. C'est à dire. pour la première tbody précédentes, qui contient un td.TargetRow retourner le td.TargetRowjQuery: trouver ancêtres frères et sœurs avec un contenu correspondant/arbre à pied

J'utilise jQuery, à l'heure actuelle, je peux reprendre le tbody contenant le ContextRow en utilisant:

jQuery(contextRow).parents("tbody").first() 

Comment puis-je maintenant trouver le frère précédent de ce tbody qui contient tr.ContextRow?

S'il y avait juste une façon pour moi de dire de contextRow marcher jusqu'à l'arbre DOM jusqu'à trouver un élément correspondant « td.TargetRow » alors ce serait l'idéal.

Merci beaucoup.

Répondre

1

Je suis un peu confus par votre description, mais quand vous dites "trouver le frère précédent de ce tbody qui contient tr.ContextRow" il semble que vous voulez trouver le précédent <tbody> qui contient un élément de la classe .contextRow et obtenir son .targetRow.

Si c'est ce que vous voulez, essayez ceci.

jQuery(contextRow).parents("tbody:first") 
        .prevAll('tbody:has(tr.ContextRow):first td.TargetRow'); 

Si vous vouliez dire td.TargetRow puis faire 'tbody:has(td.TargetRow):first td.TargetRow'.

+0

$ (contextRow) .parents ("tbody: first"). PrevAll ("tbody: contient (.TargetRow): d'abord") - était ce que j'étais après, merci beaucoup – chillitom

+0

@chillitom - De rien, mais sachez que ': contains()' correspond au texte donné, alors que ': has()' correspond au sélecteur donné. – user113716

-2

Closest - .closest() fait exactement ce dont vous avez besoin.

Obtient le premier élément ancêtre qui correspond au sélecteur, en commençant par l'élément en cours et en progressant dans l'arborescence DOM.

Votre requête serait,

$('.ContextRow').closest('tbody').siblings('tbody td.TargetRow').last(); 

Il retourne un objet (à la différence des parents, ce qui renvoie à plusieurs éléments jusqu'au haut), ou zéro si id ne trouve pas.

+0

-1 regards plus proches sur les parents, n'a rien à voir avec les frères et sœurs –

+0

Ah désolé, mon mauvais. Je sais ce que fait le plus proche. Mais comme je l'ai dit, mon mauvais ... – simplyharsh

1
jQuery('.ContextRow').closest("tbody").siblings('tbody td.TargetRow:last'); 

EDIT: Dernier pas d'abord

voir fonctionner:

+0

+1 pour me présenter à jsFiddle, très sympa! – chillitom

0

$(".ContextRow").closest("tbody").prevAll().find(".TargetRow").eq(0).css({color: "red"});

Ce retourne le plus proche unique précédente .TargetRow

http://jsfiddle.net/LfWg3/3/

Questions connexes