数组中的IndexOf元素

RaS*_*She 2 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]); 
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*mas 8

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

console.log([].indexOf.call(arr, selected[0]));
Run Code Online (Sandbox Code Playgroud)

 var arr = document.getElementsByClassName('class');
 var selected = document.getElementsByClassName('selected');
 var selected_id = [].indexOf.call(arr, selected[0]);
 console.log(selected_id);
Run Code Online (Sandbox Code Playgroud)
<div class="class"></div><div class="class"></div><div class="class selected"></div><div class="class"></div>
Run Code Online (Sandbox Code Playgroud)

这条线:

var selected_id = [].indexOf.call(arr, selected[0]);
Run Code Online (Sandbox Code Playgroud)

使用本机Array.prototype.indexOf()方法,供给arr作为this(基本上使用arr作为该方法被称为数组),提供selected[0]作为参数传递给方法,所以它有点被应用为你自己把它称为:

var selected_id = arr.indexOf(selected[0]);
Run Code Online (Sandbox Code Playgroud)

但它是否以一种识别indexOf()方法不可用的方式NodeList(以合法的方式调用它,从而防止错误).

参考文献: