Используйте $(this).closest(".module")
, чтобы найти родительский модуль, из которого происходит щелчок.
Вы также, вероятно, захотите использовать функцию завершения, чтобы изменить текст после анимации.
Приятной особенностью .closest()
является то, что он просто просматривает родительскую цепочку настолько далеко, насколько это необходимо, пока не найдет объект с правильным классом.Это гораздо менее хрупко, чем использование определенного числа ссылок .parent()
, если кто-то еще немного меняет ваш HTML-дизайн (добавляет еще один div или span или что-то подобное в родительской цепочке).
var $metaButton = $("span.archive-meta");
$metaButton.toggle(
function() {
var $slide = $(this).closest(".module").find(".archive-meta-slide");
$slide.animate({ height: "0" }, 300, function() {
$slide.html("close");
});
},
function() {
var $slide = $(this).closest(".module").find(".archive-meta-slide");
$slide.animate({ height: "43px" }, 300, function() {
$slide.html("open");
});
},
});
Вы также можете немного высушить его и создать общую функцию:
function metaToggleCommon(obj, height, text) {
var $slide = $(obj).closest(".module").find(".archive-meta-slide");
$slide.animate({ height: height}, 300, function() {
$slide.html(text);
});
}
var $metaButton = $("span.archive-meta");
$metaButton.toggle(
function() {metaToggleCommon(this, "0", "close")},
function() {metaToggleCommon(this, "43px", "open")}
);