jQuery: Как я могу зациклить набор элементов, находя только те, которые соответствуют значениям в другом массиве? - PullRequest
1 голос
/ 16 ноября 2010

У меня в основном есть небольшая функция с именем findItem(), которая должна находить искомые элементы на основе пользовательских атрибутов data- элемента.

В этом случае эточисто числовой напримерdata-slide=1.

Я немного не в курсе, как сопоставить значение слайда данных каждого элемента тому, которое содержится в другом массиве.

Вот более конкретныйпример:

function findItem(count) {
    var collection = [];

    $.each(allMyLiItems, function(i, item) {

        if ( $(item).data('slide') == count ) { 
            collection.push(item);
        }

    });

    return $(collection);
}
findItem([1,3])

, который не работает, потому что count внутри оператора if, кажется, ничего не соответствует.

Страница содержит 4 <li data-slide="{number}">… элементов, поэтому 1,3 должноверните первый и третий из этих элементов.

Что я здесь не так делаю?

Ответы [ 2 ]

5 голосов
/ 16 ноября 2010

Использование jQuery.grep и jQuery.inArray:

function findItem(items) {
    return jQuery.grep($('li'), function(element, index) { 
       return jQuery.inArray($(element).data('slide'), items) != -1;
    });
}

Рабочий пример

1 голос
/ 16 ноября 2010

Чтобы исправить проблему с count внутри статуса if, не совпадающего ни с чем, попробуйте это:

function findItem(count) {
    var collection = [],
             count = count;

    $.each(allMyLiItems, function(i, item) {

        if ( $(item).data('slide') == count ) { 
            collection.push(item);
        }

    });

    return $(collection);
}
findItem([1,3])

Это создаст закрытие, поэтому анонимная функция внутри each сможет его увидеть.

Ваша вторая проблема заключается в том, что вы передаете count в виде массива. Таким образом, условие if нуждается в небольшом исправлении:

function findItem(count) {
    var collection = [],
             count = count;

    $.each(allMyLiItems, function(i, item) {

        if ( count.indexOf($(item).data('slide')) !== -1 ) { 
            collection.push(item);
        }

    });

    return $(collection);
}
findItem([1,3])
...