Есть довольно много вещей, которые неправильны или странны в коде, который вы дали.Во-первых, HTML-код недействителен.Для создания списков второго уровня, таких как
Ваш список ul
должен находиться внутриli
.На самом деле, ничего не должно быть найдено в списках ol
и ul
, кроме элементов списка li
.Точно так же li
также не должен появляться нигде, кроме как в списках.Тот факт, что HTML-код является недействительным, является достаточной причиной для того, чтобы эффекты стали бесполезными.
Кроме того, такие строки, как
$('li.directory > ul').css('display','none');
Можно записать лучше как
$('li.directory > ul').hide();
Старайтесь не использовать контекст, например $('ul', this)
, хотя бы потому, что$(this).children('ul')
более читабельно.
Редактировать Ну, в этом случае комментарий @ jensgram является правдоподобным - поскольку ссылки внутри li.directory
являются дочерними, нажатие на них также означает нажатие на их родителей.Так что вам нужно ограничить свой обработчик событий привязкой внутри каждого li.directory
, например так:
$('li.directory > a').click(function(event) {
var current = $(this);
current.parent().toggleClass('expanded');
current.next().slideToggle('slow');
return false;
});
Обратите внимание, что я также изменил часть кода обхода DOM для работы с новымселектор.Смотрите в прямом эфире здесь: http://www.jsfiddle.net/Yq8U3/