Зацикливать элементы до совпадения, найденного в jQuery - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть серия li элементов, и мне нужен наиболее эффективный способ их циклического повторения и возврата индекса. Однако мне нужно перепроверить класс li и не возвращать индекс, если он имеет определенный класс.

Это в основном для меню в стиле приложения с поддержкой клавиатуры. По сути, рассмотрим следующую разметку:

<ul>
    <li class="selected">First Item</li>
    <li class="disabled">Second Item</li>
    <li class="separator">Third Item</li>
    <li>Fourth Item</li>
</ul>

Мне нужна функция, которую я могу использовать для циклического перебора элементов li и возврата следующего индекса (класс selected будет применен к следующему выбираемому элементу). В данный момент я зацикливаюсь и просто проверяю, имеет ли li класс separator, если это так, увеличивает индекс и возвращает его.

Однако в приведенном выше примере функция должна возвращать 3, поскольку любой элемент с классом disabled или separator не может быть выбран.

Может кто-нибудь дать совет, как мне этого добиться с помощью jQuery? Я думал, что можно было бы сделать что-то вроде этого:

function get_next_index()
{
    var current_index = $('ul li.selected');
    var index = $('ul li:gt(' + current_index + ')').not('.disabled').not('.separator').get(0).index();
    if(!index || index < current_index)
    {
        return -1;
    }
    else
    {
        return index;
    }
}

Ответы [ 3 ]

3 голосов
/ 08 декабря 2011

Примерно так должно работать:

alert($("li:not(.disabled,.separator)").index());

Вы можете увидеть это в действии здесь:

http://jsfiddle.net/Zf9Vv/

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

0 голосов
/ 08 декабря 2011

Мой вклад:

$("li.selected").nextAll(":not(.disabled,.separator)").first().index();

Это берет всех следующих братьев и сестер, отфильтровывает .disabled и .separator и возвращает индекс первого.

0 голосов
/ 08 декабря 2011
$('li').each(function () {

  if (! $(this).hasClass('disabled'))
  {
    // code for non-disabled li goes here
  }

});

Я думаю, что это в основном то, что вы просите. Не уверен, что вы подразумеваете под «возвратить индекс» - вам нужен массив индексов для всех элементов без класса «disabled»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...