nextUntil
[документы] ваш друг:
$('.evenPack, .oddPack').click(function() {
var mod = this.className.indexOf('even') > -1 ? 'odd' : 'even';
$(this).nextUntil('.' + mod + 'Pack').slideToggle();
});
Если между .evenPack
есть другие строкии .oddPack
, вы можете фильтровать элементы .*SubPack
, передав второй аргумент nextUntil
:
$(this).nextUntil('.' + mod + 'Pack', '.' + (mod === 'even' ? 'odd' : 'even') + 'SubPack').slideToggle();
Если строки .evenPack
и .oddPack
всегда чередуются, вы также можете сделать:
var $elements = $('.evenPack, .oddPack')
$elements.click(function() {
$(this).nextUntil($elements.get($elements.index(this) + 1)).slideToggle();
});
Это работает, поскольку элементы выбираются в порядке их появления в документе.Поэтому вместо поиска следующего элемента с классом evenPack
или oddPack
он просто берет следующий элемент в выбранном наборе.
DEMO (обратите внимание, что .slideToggle
не работает должным образом со строками таблицы (они не скользят))