Я не думаю, что метод .closest
работает для вас, потому что он находит только предков, а не братьев и сестер или потомков предков:
Учитывая объект jQuery, который представляет набор элементов DOM, метод .closest () просматривает эти элементы и их предков в дереве DOM и создает новый объект jQuery из соответствующих элементов. Методы .parents () и .closest () похожи в том, что они оба проходят по дереву DOM.
Решение
Вместо использования .closest
вы можете использовать функцию .parent
, чтобы найти владельца, а затем использовать другие функции обхода дерева , чтобы найти потомков, которые соответствуют определенным селекторам .
Попробуйте этот отредактированный код - http://jsfiddle.net/9hvVn/3/:
$("a.expand_widget").live("click", function () {
var parentWidget = $(this).parent('div.widget-head')
.parent('li.widget');
parentWidget.children(".widget-content").toggleClass("hidden");
parentWidget.children(".widget-content_next").toggleClass("hidden");
});
Это довольно строгое, но вы можете немного ослабить его, если вам нужно. Вы также можете использовать различные функции-братья в div.widget-head
вместо того, чтобы сначала получить родитель-родитель.