假设我有一个元素列表,如:
<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插件,但这对于这么小的问题似乎太过分了。
你知道一种更有效的方法吗?
答案 0 :(得分:4)
var $result = $([]); // Empty jQuery object
var $lis = $("li");
for (var i = 0; i < array.length; i++) {
$result = $result.add($lis.eq(array[i]));
};
答案 1 :(得分:2)
您可以对items数组执行indexOf,以查看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;
});
答案 2 :(得分: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
}
你必须使用数组来获取元素,因为这是迭代作业