2009-08-30 4 views
0

Я столкнулся с проблемой, которая просто не кажется правильной. У меня есть пара якорных тегов на одном уровне в DOM. Структура ниже:jQuery Traversing Problem

div.mcoup 
    div.lcoup 
    div.rcoup 
     div.rcoupmeta 
      a.rcoupedit 
      a.rcoupdelete 
    div.updcoup 
    div.delcoup 

А вот сценарий я использую:

$('div.delcoup').hide(); 
    $('a.rcoupdel').click(function() { 
     $(this).parent().parent().next('div.delcoup').slideToggle(400); 
     $('div.updcoup').slideUp(400); 
     $('div.crecoup').slideUp(400); 
     return false; 
    }); 

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

Странным здесь является a.rcoupedit правильно ориентирована и влияет на div.updcoup время, с тем же кодом, a.rcoupdelete, похоже, ничего не делает для div.delcoup. Однако он перемещает другие элементы. Я думал, что из a.rcoupdelete нам нужно подняться на два уровня, а затем найти следующий div с классом delcoup. Очевидно, что-то не так.

Как правильно настроить таргетинг на div.delcoup?

ответ

3

.next() конкретно выбирает самый следующий элемент в DOM (на том же уровне). Версия .updcoup работает правильно, потому что, действительно, после нахождения родителя родителя якоря (то есть div.rcoup) элемент .next() равен div.updcoup.

Чтобы просмотреть все элементы, которые приходят после выбранного одного, используйте .nextAll():

$(this).parent().parent().nextAll('div.delcoup').slideToggle(400); 
+0

Его всегда простые вещи, которые получают я ... Спасибо! –