Увлекательный вопрос.Я думаю, что вам понадобится цикл, примерно такой:
var parents = $(".myWidespreadClass").parent(); // Not plural!
while (parents[0]) {
// Process them, e.g.
parents.each(function() { /* ... */ });
// Get the next tier
parents = parents.parent(); // Not plural!
}
Живой пример | Живой источник - Обновление , но смотри ниже, что может завершиться досрочно
Возможно, вы захотите завершить работу немного раньше, например:
while (parents[0] && parents[0].nodeName !== "BODY") {
... в зависимости от ваших потребностей.Я сделал в примере. См. Ниже.
Обновление На самом деле, вы должны быть осторожны с ранним завершением, возможно, лучше отфильтровать, когда вы обрабатываете родителей вместо этого,как то так:
Живой пример | Живой источник
var parents = $(".myWidespreadClass").parent();
while (parents[0]) {
// Process them, e.g.
parents.each(function() {
if ($.contains(document.body, this)) {
// This one is under `body`, process it
display("Visiting " + this.nodeName + "." + this.className);
}
});
// Get the next tier
parents = parents.parent(); // Not plural!
}
Причина в том, что ваш начальный набор элементов может быть на совершенно разных уровнях в DOM, и поэтому вы достигнете самого верхнего элемента для некоторых из них быстреечем для других.Проверка body
, приведенная выше, может не соответствовать вашим потребностям, но вы поняли идею.