在我的JSFIDLE中,我只是尝试迭代一个元素数组。正如日志语句所证明的那样,数组是非空的。然而,调用forEach
给了我一个(没有那么大帮助的)“UncaughtTypeError
:undefined
不是函数”错误。
我一定在做傻事;我做错了什么?
我的代码:
var arr = document.getElementsByClassName('myClass');
console.log(arr);
console.log(arr[0]);
arr.forEach(function(v, i, a) {
console.log(v);
});
.myClass {
background-color: #FF0000;
}
<div class="myClass">Hello</div>
如果要访问特定类的每个元素的ID,可以执行以下操作:
Array.from(document.getElementsByClassName('myClass')).forEach(function(element) {
console.log(element.id);
});
试试这个,它应该可以工作:
<html>
<head>
<style type="text/css">
</style>
</head>
<body>
<div class="myClass">Hello</div>
<div class="myClass">Hello</div>
<script type="text/javascript">
var arr = document.getElementsByClassName('myClass');
console.log(arr);
console.log(arr[0]);
arr = [].slice.call(arr); //I have converted the HTML Collection an array
arr.forEach(function(v,i,a) {
console.log(v);
});
</script>
<style type="text/css">
.myClass {
background-color: #FF0000;
}
</style>
</body>
</html>
那是因为文档。GetElementsByCassName
返回HTMLCollection,而不是数组。
幸运的是,它是一个“类似数组”的对象(这解释了为什么它被记录为一个对象,以及为什么您可以使用标准的for
循环进行迭代),所以您可以这样做:
[].forEach.call(document.getElementsByClassName('myClass'), function(v,i,a) {
对于ES6(在现代浏览器或Babel上),您也可以使用Array。从
从类似数组的对象构建数组:
Array.from(document.getElementsByClassName('myClass')).forEach(v=>{
或将类似阵列的对象展开为一个阵列:
[...document.getElementsByClassName('myClass'))].forEach(v=>{
上下文 我想迭代一个Spark数据集,并为每一行更新一个HashMap。 以下是我的代码: 问题 我的问题是Foreach根本不迭代,lambda从来没有执行过,我不知道为什么。 我在这里实现了它:如何在SparkJava中遍历/迭代数据集? 最后,尽管数据集不是空的,但所有内部向量都保持为空(初始化时)(查看给定代码示例中的第一个注释)。 我知道foreach从不迭代,因为我做了两个测试: 添加
我似乎在实现中偶然发现了一些有趣的东西,但我不能把头绕过去。下面是一些代码,说明了我的意思: 其思想是,如果您创建一个,如下所示: 并在(中保留了所有元素)的内部查看它将报告的内容。因此,您添加了一个元素--您得到了9个未使用的额外插槽。 另一方面,如果您这样做: 添加一个元素,保留的空间仅限于该元素,仅此而已。 在内部,这通过两个字段实现: 我们将它与EMPTY_ELEMENTDATA区分开来,
我有一个中等大小的Spring应用程序。当我重构一些loc时,我注意到以下行为: 事实上,注入工作正常: 当我尝试使用构造函数注入时,环境为空,我的应用程序告诉我,由于循环引用,它无法创建配置bean: 在堆栈的某个地方: 原因:org.springframework.beans.factory.Bean货币InCreationException:创建名为appConfig的bean时出错:请求的
为什么我会。。。 未捕获的类型错误:string.split 不是一个函数 ...当我跑步时...
我最近下载并安装了Jmet2.11。之后我尝试了该程序的记录功能,但这导致了一条错误消息:“无法创建脚本记录代理-有关详细信息,请参阅日志”。 我尝试过修改“环境变量”,但那没有帮助。 在应用程序的日志中显示了以下消息。 2014/08/19 10:23:02警告-jmeter。协议http。代理ProxyControl:无法打开/读取密钥存储C:\apache-jmeter-2.11\bin\p
为什么结果不是12345?
下面的代码出现了最奇怪的错误。 /src/components/competitions/TheVault表单。js第5行:在函数“contactform”中调用React钩子“useForm”,该函数既不是React函数组件,也不是定制的React钩子函数React钩子/钩子规则 搜索关键字以了解有关每个错误的更多信息。 我刚刚安装了react hook表单并运行了演示代码。
建议将以下语句更改为NetBeans中的lambda表达式。 但是,当我应用假定的更改(Alt Enter)时,我得到了: 当这不会与消息一起编译时: 没有找到合适的构造函数为KeyFrame(持续时间,(事件前夕[…]}}})-参数不匹配 问题是为什么NetBeans会提出一些它无法实现的东西?如何在Timeline构造函数中实际使用lambda函数?谢谢