当前位置: 首页 > 面试题库 >

如何将DOM节点列表转换为Javascript中的数组?

公子昂
2023-03-14
问题内容

我有一个接受HTML节点列表的Javascript函数,但它需要一个Javascript数组(它在该数组上运行一些Array方法),并且我想向其提供Document.getElementsByTagName返回DOM节点列表的输出。

最初,我想到了使用简单的方法:

Array.prototype.slice.call(list,0)

而且,这在所有浏览器中都可以正常工作,除了InternetExplorer会返回错误“JScript对象预期”,因为Document.getElement*方法返回的DOM节点列表显然不足以成为函数调用目标的JScript对象。

注意事项:我不介意编写InternetExplorer特定的代码,但是我不允许使用任何Javascript库(例如JQuery),因为我正在编写要嵌入到第三方网站中的小部件,并且无法加载外部库会给客户带来冲突。

我最后的努力是遍历DOM节点列表并自己创建一个数组,但是有更好的方法吗?


问题答案:

ECMAScript规范指出:NodeLists是宿主对象,Array.prototype.slice不能保证在宿主对象上使用方法可以正常工作。

slice函数是否可以成功应用于主机对象取决于实现。

我建议您做一个简单的函数来遍历NodeList并将每个现有元素添加到数组中:

function toArray(obj) {
  var array = [];
  // iterate backwards ensuring that length is an UInt32
  for (var i = obj.length >>> 0; i--;) { 
    array[i] = obj[i];
  }
  return array;
}

更新:

正如其他答案所建议的那样,您现在可以在现代环境中使用传播语法或Array.from方法:

const array = [ ...nodeList ] // or Array.from(nodeList)

但是考虑一下,我想将NodeList转换为Array的最常见用例是对其进行迭代,现在该NodeList.prototype对象具有本forEach机方法,因此,如果您在现代环境中,则可以直接使用它,也可以使用一个民意测验。



 类似资料:
  • 问题内容: 我想将浮点数转换为JavaScript中的整数。实际上,我想知道如何同时进行标准转换:截断和舍入。而且有效,而不是通过转换为字符串和解析。 问题答案: 例子 Positive Negative Positive - Larger numbers Negative - Larger numbers

  • 问题内容: 考虑以下代码段(假设已经设置为some ): 注意,温度字段是浮标的列表。我想将这些浮点数列表转换为MLlib类型,并且我希望使用基本API而不是通过RDD来表示这种转换(效率低下,因为它将所有数据从JVM发送到python,是使用Python完成的,我们无法获得Spark的Catalyst优化器yada yada的好处。我该怎么做呢?特别: 有没有办法让演员直接工作?请参阅下面的详细

  • 问题内容: 我是Python的新手,需要将列表转换为字典。我知道我们可以将元组列表转换为字典。 这是输入列表: 并且我想将此列表转换为元组列表(或直接转换为字典),如下所示: 我们如何在Python中轻松做到这一点? 问题答案: 您想一次将三个项目分组吗? 您想一次分组N个项目吗?

  • 在我的Spring Boot项目中,我有两个类(实体和模型) 在模型中有一个列表 :

  • 问题内容: 我有一个必须解析的二进制文件,并且正在使用Python。有没有办法占用4个字节并将其转换为单个精度浮点数? 问题答案:

  • 问题内容: 如何在Java中将数组转换为列表? 我使用了,但是行为(和签名)从Java SE 1.4.2(现在已存档的文档)以某种方式改变为8,我在网络上发现的大多数代码片段都使用1.4.2行为。 例如: 在1.4.2上返回包含元素1,2,3的列表 在1.5.0+上返回包含垃圾邮件数组的列表 在许多情况下,它应该很容易检测到,但是有时它可能会被忽略而不会引起注意: 问题答案: 在你的示例中,这是因