Есть две проблемы с однострочными, упомянутыми в других ответах:
- Они пропускают случай, когда нет невидимых строк.В этом случае nextUntil не возвращает никаких элементов.Ниже приведен код, который устраняет эту проблему.
- Если вы используете определенное имя класса вместо стандартного отображения / скрытия jQuery, то оно также не работает надежно.
Ниже код исправляет обе вышеупомянутые проблемы с другими ответами:
//invisibleRowClassName parameter is optional
function nextVisibleSibling(element, invisibleRowClassName) {
var selector = invisibleRowClassName ? (":not(." + invisibleRowClassName + ")") : ".visible";
var invisibleElements = element.nextUntil(selector);
if (invisibleElements.length === 0) {
return element.next();
}
else {
return invisibleElements.last().next();
}
}
И вот код, чтобы получить также предыдущий видимый элемент.
//invisibleRowClassName parameter is optional
function prevVisibleSibling(element, invisibleRowClassName) {
var selector = invisibleRowClassName ? (":not(." + invisibleRowClassName + ")") : ".visible";
var invisibleElements = element.prevUntil(selector);
if (invisibleElements.length === 0) {
return element.prev();
}
else {
return invisibleElements.last().prev();
}
}