Helpers - компьютеры, интернет, программирование

Получить предыдущий видимый элемент jquery

Мне нравится <ul>

<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li style="display:none;">4</li>
<li class="curSelected">5</li>
<li>6</li>
</ul>

Теперь из <li> 5 мне нужна ссылка на предыдущий видимый элемент, т.е. <li> 3

Как я могу это получить?

Я пробовал $('li.curSelected').prev(":visible:last");

Но это не работает.

Пожалуйста помоги.

12.06.2013

Ответы:


1

Вы можете использовать .prevUntil() для поиска до (но не включая) первого видимого элемента, а затем использовать .prev():

$('.curSelected').prevUntil(':visible').prev()

Обновить

Как указано в комментариях, это не сработает, если непосредственно предыдущий элемент уже виден. К сожалению, для этого не существует оптимального jQuery, поэтому вот альтернатива:

$prev = $('.curSelected')
do {
    $prev = $prev.prev();
} while ($prev.length && $prev.is(':hidden'));
12.06.2013
  • Да, я предполагал, что если вы сделаете prevUntil и он найдет ближайший элемент, он вернет текущий элемент, меня это удивило. В этом случае возвращение пустого объекта выходит за рамки логики функции. В итоге я использовал решение prevAll выше. 29.10.2013
  • @RonenFestinger Это нормально. Обратите внимание, что prevAll() проходит через всех братьев и сестер, прежде чем дать вам результат, а не только до тех пор, пока он не достигнет того, который вы хотите. 29.10.2013

  • 2

    Попробуй это:

    $('li.curSelected').prevAll(":visible:first");
    

    prev() возвращает только непосредственно предшествующий выбранному элемент. prevAll() возвращает все предыдущие.

    12.06.2013
  • Это выберет <li>1</li>! 12.06.2013

  • 3

    Поскольку jQuery проходит через dom, используя prev, от текущего к первому, но возвращает только один элемент ( предыдущий), вы должны использовать .prevAll.

    $("li.curSelected").prevAll(":visible:first");
    

    См. рабочую скрипту этого примера.

    12.06.2013
  • @Veeru A S это должно сработать. 12.06.2013

  • 4

    Вот мой пример. Работает идеально, любой браузер.

    var elem = $( some_thing ).next();
    while( elem && elem[0] != undefined && !elem.is( ':visible' ) )
        elem = elem.next();
    if( elem && elem[0] != undefined )
        elem.doSomething();
    
    21.03.2016
  • следующий или предыдущий - не важно 21.03.2016
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..