数组中的IndexOf元素

时间:2014-11-09 15:43:04

标签: javascript dom

我尝试从元素数组中获取索引。

 var arr = document.getElementsByClassName('class'); //3 elements

 console.log(arr);
 output// [div.class.selected, div.class, div.class, item: function, namedItem: function]

 var selected = document.getElementsByClassName('selected');
 var selected_id = arr.indexOf(selected[0]); 

最后一行代码给我一个错误Uncaught TypeError: undefined is not a function。 我还尝试添加toString()并搜索,但同样的错误。

3 个答案:

答案 0 :(得分:8)

因为arr是(实时)NodeList而不是数组;你想要的是,我想:

console.log([].indexOf.call(arr, selected[0]));



 var arr = document.getElementsByClassName('class');
 var selected = document.getElementsByClassName('selected');
 var selected_id = [].indexOf.call(arr, selected[0]);
 console.log(selected_id);

<div class="class"></div><div class="class"></div><div class="class selected"></div><div class="class"></div>
&#13;
&#13;
&#13;

该行:

var selected_id = [].indexOf.call(arr, selected[0]);

使用原生Array.prototype.indexOf()方法,将arr作为this(基本上使用arr作为调用该方法的数组),提供{{1}作为要传递给方法的参数,所以当你自己调用它时,排序会被应用:

selected[0]

但是以一种方式识别var selected_id = arr.indexOf(selected[0]); 方法对indexOf()对象不可用(以合法的方式调用它,从而防止错误)。

参考文献:

答案 1 :(得分:3)

getElementsByClassName不会返回数组,而是HTMLCollection。因此,它没有像indexOf这样的数组方法。您需要显式调用this的{​​{1}}值的数组方法,如下所示:

HTMLCollection

答案 2 :(得分:3)

这是因为document.getElementsByClassName('class')不返回Array,而是NodeList,它是一个类似数组的对象。您可以使用以下命令将类似数组的对象转换为数组:

var elements = document.getElementsByClassName('class');
var arr = Array.prototype.slice.call(elements);