2014-01-16 3 views
1

Скажем, у меня есть список элементов, таких как:Получить набор произвольных элементов по их индексу

<ul> 
    <li>a</li> 
    <li>b</li> 
    <li>c</li> 
    <li>d</li> 
    <li>e</li> 
    <li>f</li> 
    <li>g</li> 
    <li>h</li> 
    <li>i</li> 
    <li>j</li> 
</ul> 

И у меня есть массив как это: [ 2, 5, 6 ].

(как список элементов и этот массив может быть достаточно велик, но давайте оставим это просто)

Как я могу использовать JQuery эффективно, чтобы выбрать элементы, соответствующие эти элементы? (В данном случае это будет список элементов, которые содержат c, f и g)

Один из способов будет использовать JQuery each() и поиск по индексу в массиве. Но это требует линейного поиска в массиве для каждой итерации, и это не совсем оптимизировано.

Другим способом является использование переключателя eq() или eq(), передающего один индекс. Но тогда я должен повторить процесс для каждого элемента массива, и это тоже не эффективно. К сожалению, eq() не получает массив в качестве параметра.

Другой способ - написать плагин jQuery, но это похоже на слишком большую работу для такой небольшой проблемы.

Вы знаете лучший способ, который работает более эффективно?

+1

Как получить доступ ко всему списку 'li' с помощью' var childrens = $ ("ul"). Children ("li"). ; 'тогда вы можете ссылаться на него индексом, например' alert (childrens [index]) ' –

+1

. Кое-что собирается перебирать ваш массив и захватывать каждый элемент DOM, который соответствует числу в каждом элементе массива. У jQuery нет встроенного способа сделать это. Итак, напишите себе небольшую функцию, чтобы сделать это самостоятельно. Вы можете либо сделать его утилитой, либо подключаемым модулем jQuery - вашим выбором. – jfriend00

ответ

4
var $result = $([]); // Empty jQuery object 
var $lis = $("li"); 
for (var i = 0; i < array.length; i++) { 
    $result = $result.add($lis.eq(array[i])); 
}; 
+0

у вас может быть изменение на '$ result = $ result.add ($ lis [array [i]]);' –

+0

Спасибо, ты прав. – Barmar

2

Вы можете сделать indexOf массива items, чтобы узнать, существует ли элемент по индексу idx из $listitems.

var $listitems = $("<ul><li>a</li><li>b</li><li>c</li><li>d</li><li>e</li><li>f</li><li>g</li><li>h</li><li>i</li><li>j</li></ul>").find("li");//jQuery object of all the list items 
var items = [ 2, 5, 6 ]; 

var $filtered = $listitems.filter(function(val, idx) { 
    return $.inArray(items, idx) !== -1; 
}); 

Вы упомянули элементы могут быть большими, так что может быть лучше, чтобы преобразовать items к объекту

var itemHash = items.reduce(function(memo, item) { 
    memo[item] = true; 
    return memo; 
}, {}); 
var $filtered = $listitems.filter(function(val, idx) { 
    return itemHash[idx] !== undefined; 
}); 
1

Вы можете использовать

$("ul li").eq(0) will give you the first element. 

использовать нижеприведенный скрипт

narray = new Array(5,6,7); 
     for (i=0;i< narray.length;i++){ 
     $("ul li").eq(narray[i]).html('hello') //for that corresponding element 
    } 

Вы должны использовать массив, чтобы получить элемент, так как это итеративное задание

Смежные вопросы