Здесь можно сделать несколько вещей, чтобы улучшить производительность и стабильность. Во-первых, вместо использования next()
метода, вы бы просто использовали
$('.expand').click(function () { $('.content').slideToggle(500); });
Конечно, это имеет очевидный недостаток (?) Расширения и сжатия всех .content
областей при нажатии на любой .expand
.
Но вы можете улучшить свою производительность и стабильность, добавив пару атрибутов html в .expand
и .content
, например так:
<div class="expand" data-for="content_id">Click to toggle</div>
<div class="content" id="content_id">This is the toggable content</div>
Во-первых, для этого требуется последняя версия jQuery (в идеале 1.6 или выше) для атрибутов data-
. Я использую data-for
для обозначения того, что один конкретный .expand
применяется к одному конкретному .content
. Это похоже на использование атрибута for
в label
и элементах формы.
Во-вторых, к областям .content
применяется новый (и уникальный для каждой) id
. Это позволяет селекторам jQuery гораздо быстрее нацеливать эти элементы с помощью функции getElementById()
.
Наконец, новый javascript будет выглядеть так:
$('.expand').click(function () {
var id = '#' + $(this).data('for');
$(id).slideToggle(500);
});
И если вам нужна функциональность аккордеона (т. Е. Сворачивать все .content
при каждом нажатии и активировать элемент, соответствующий нажатому data-for
:
$('.expand').click(function () {
var id = '#' + $(this).data('for');
$('.content').slideUp(500);
$(id).slideDown(500);
});