2009-08-30 55 views
0

我有一個顯示搜索結果,並具有如下所示的DOM頁面:稍微複雜的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 

目前,我隱藏所有div.updcoup和div.delcoup並用以下添加的slideToggle功能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; 
    }); 

說div.updcoup在搜索結果1切換,然後我切換div.updcoup在搜索結果2.如何效果基本show可見div.updcoup搜索結果1當我切換div.updcoup在搜索結果2中?

+0

注意:$(this).parent()。parent()。nextAll('div.delcoup')看起來很糟糕。嘗試$(this).closest('div.mcoup')。find('div.delcoup'),因爲這取決於你的結構。 – strager 2009-08-30 02:44:27

+0

感謝您的提示:) – 2009-08-30 02:52:15

回答

0

我受到了strager的評論的啓發。他不是那裏,最後,工作答案如下:

$('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; 
    }); 

感謝您的幫助Strager!

+0

我不確定與我的答案有多少不同。從我所看到的,而不是重新使用這個Delcoup,你重新獲取對象。 – strager 2009-08-30 06:49:58

+0

當我使用你的代碼時,它不起作用。我的確如此,這就是它的不同之處。 – 2009-08-30 06:53:58

0

你的問題我不太清楚,但看完眼前這個:

我的問題是什麼樣的連鎖反應將努力最有效地定位所有可見div.updcoup和div.delcoup

你想要這個:

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

道歉的歧義。我試圖儘可能清楚。 我想添加類似於您的答案的東西: $(this).parent()。parent()。nextAll('div.delcoup')。slideToggle(400); 所以當$(this)被切換時,所有* other *,visible,div.delcoup slideUp。 – 2009-08-30 02:46:13

0

你想從集合中刪除一個項目?如果是,請這樣做:

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

你的答案非常接近!我會在下面的答案。 – 2009-08-30 05:47:52