我想在JavaScript中获取indexOf元素数组中的元素。
以下是代码:
function redrawchatbox(chatbox) {
//chatbox is a html element.
chatbox.remove();
variable = variable - 280;
redraw = document.getElementsByName("chatbox");
// this is the error - gives me redraw.indexOf is not a function.
closedchatbox = redraw.indexOf(chatbox);
for (i = redraw.length; i > 0; i--) {
x = i - 1;
redraw[x].style.right = (parseInt(redraw[x].style.right.replace("px", "")) - 280) + "px";
}}
我希望关闭聊天框的索引,以便我可以在正确的位置重绘所有聊天框。当我在重绘数组上使用indexOf时,它会抛出该错误。
我该怎么做才能解决这个问题?
答案 0 :(得分:2)
那是因为getElementsByName
返回HTMLCollection
,这是一个类似数组的对象而不是数组。您应该将集合转换为数组,然后使用indexOf
方法。
var chatboxArr = [].slice.call(closedchatbox);
var index = chatboxArr.indexOf(chatbox);
Array.prototype.slice
方法可用于创建数组的浅表副本。在上面的代码段中,slice
方法call
与集合作为this
值进行HTMLCollection
,结果它返回一个包含{{1}}项的数组
答案 1 :(得分:0)
替换它:
closedchatbox = redraw.indexOf(chatbox);
用这个:
closedchatbox = Array.prototype.indexOf.call(redraw, chatbox);
getElementsByName
返回NodeList
,它不是数组,而是“类似数组的对象”。它本身没有indexOf
方法,但Array
方法可以通过这种方式应用于它。
答案 2 :(得分:0)
您收到该错误,因为getElementsByName返回NodeList对象。