2009-08-30 4 views
0

J'ai une page qui affiche les résultats de recherche et a un DOM comme ce qui suit:problème complexe jQuery Travsersing

div.mcoupdisplay 
    div.mcoup //search result 1 
      div.lcoup 
     div.rcoup 
      div.rcoupmeta 
       a.rcoupedit 
       a.rcoupdelete 
     div.updcoup 
     div.delcoup 
    div.mcoup //search result 2 
     div.lcoup 
     div.rcoup 
      div.rcoupmeta 
       a.rcoupedit 
       a.rcoupdelete 
     div.updcoup 
     div.delcoup 

Je cache actuellement tous div.updcoup et div.delcoup et ajouter des fonctionnalités slideToggle avec les éléments suivants jQuery:

$('div.delcoup').hide(); 
    $('a.rcoupdelete').click(function() { 
     $(this).closest('div.mcoup').find('div.delcoup').slideToggle(400); 
     $('div.updcoup').slideUp(400); 
     $('div.crecoup').slideUp(400); 
     return false; 
    }); 

    $('div.updcoup').hide(); 
    $('a.rcoupedit').click(function() { 
     $(this).closest('div.mcoup').find('div.updcoup').slideToggle(400); 
     $('div.delcoup').slideUp(400); 
     $('div.crecoup').slideUp(400); 
     return false; 
    }); 

Say div.updcoup est basculée dans le résultat de recherche 1, puis je bascule div.updcoup dans le résultat de la recherche 2. Comment puis-je slideUp la recherche div.updcoup visible résultat 1 quand je bascule la div.updcoup dans le résultat de la recherche 2?

+0

Une note: $ (this) .parent(). Parent(). NextAll ('div.delcoup') est incorrect. Essayez $ (this) .closest ('div.mcoup'). Find ('div.delcoup'), car cela dépend moins de votre structure. – strager

+0

Merci pour le conseil:) –

Répondre

0

J'ai été inspiré par les commentaires de strager. Son n'était pas tout à fait là, la réponse de travail finale est ci-dessous:

$('div.delcoup').hide(); 
    $('a.rcoupdelete').click(function() { 
     var thisDelcoup = $(this).closest('div.mcoup').find('div.delcoup'); 
     $(this).closest('div.mcoup').find('div.delcoup').slideToggle(400); 
     $('div.delcoup').not(thisDelcoup).slideUp(400); 
     $('div.updcoup').slideUp(400); 
     $('div.crecoup').slideUp(400); 
     return false; 
    }); 

    $('div.updcoup').hide(); 
    $('a.rcoupedit').click(function() { 
     var thisUpdcoup = $(this).closest('div.mcoup').find('div.updcoup'); 
     $(this).closest('div.mcoup').find('div.updcoup').slideToggle(400); 
     $('div.delcoup').slideUp(400); 
     $('div.updcoup').not(thisUpdcoup).slideUp(400); 
     $('div.crecoup').slideUp(400); 
     return false; 
    }); 

Merci pour votre aide Strager!

+0

Je ne sais pas à quel point c'est différent de ma réponse. D'après ce que je vois, au lieu de réutiliser ceDelcoup, vous récupérez l'objet. – strager

+0

Lorsque j'ai utilisé votre code, cela n'a pas fonctionné. La mienne, c'est comme ça que c'est différent. –

0

Votre question n'est pas très clair pour moi, mais en lisant ceci:

Ma question est ce que la chaîne fonctionnerait mieux pour cibler tous les div.updcoup visibles et div.delcoup

Vous voulez ceci:

$('div.updcoup:visible, div.delcoup:visible').slideUp(400); 
+0

Toutes mes excuses pour l'ambiguïté. J'ai essayé d'être aussi clair que possible. Je veux ajouter quelque chose comme votre réponse à: $ (this) .parent(). Parent(). NextAll ('div.delcoup'). SlideToggle (400); Donc tout * autre *, visible, div.delcoup slideUp quand $ (this) est basculé. –

0

Voulez-vous supprimer un élément de l'ensemble? Si oui, faites ceci:

var thisDelcoup = $(this).closest('div.mcoup').find('div.delcoup').slideToggle(400); 
$('div.delcoup').not(thisDelcoup).slideUp(400); 
$('div.updcoup').slideUp(400); 
$('div.crecoup').slideUp(400); 
+0

Votre réponse était si proche! Je vais la réponse ci-dessous. –