按索引获取一组任意元素

时间:2014-01-16 06:16:28

标签: javascript jquery

假设我有一个元素列表,如:

<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来挑选与这些元素相对应的元素? (在这种情况下,它将是包含cfg)的列表元素

一种方法是使用jQuery each()并搜索数组中的索引。但是这需要在每次迭代时对数组进行线性搜索,并且它没有得到很好的优化。

另一种方法是使用传递一个索引的eq()选择器或eq()函数。但是我必须为每个数组元素重复这个过程,这也是无效的。不幸的是,eq()没有将数组作为参数。

另一种方法是编写一个jQuery插件,但这对于这么小的问题似乎太过分了。

你知道一种更有效的方法吗?

3 个答案:

答案 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
     }

你必须使用数组来获取元素,因为这是迭代作业