未捕获的 TypeError:forEach 不是 javascript 函数中的函数错误
Posted
技术标签:
【中文标题】未捕获的 TypeError:forEach 不是 javascript 函数中的函数错误【英文标题】:Uncaught TypeError: forEach is not a function error in javascript function 【发布时间】:2020-07-04 11:55:48 【问题描述】:我有这个错误
Uncaught TypeError: trList.forEach is not a function
在这个函数中
function findMatchingRow(word)
const found = []
const trList = document.querySelectorAll('#main_table_countries_today > tbody > tr')
trList.forEach(function(tr, i)
if(tr.textContent.match(word))
found.push(index: i, content: tr.textContent)
)
return found
const matches = findMatchingRow('Tunisia')
console.log(matches)
if(matches.length > 0)
console.log('found at:', matches.map(function(m) return m.index; ))
我认为这个问题与 ES6 兼容性有关
【问题讨论】:
见***.com/questions/13433799/… 【参考方案1】:编辑:
像这样使用for
循环:for (var i = 0; i < trList.length; i++) ...
并在其中将 tr
替换为 trList[i]
您可能需要删除一个 )
,它结束了您刚刚替换的 forEach
循环的左括号。
原答案:
尝试使用以下代码更改代码中的第四行:Array.prototype.forEach.call(trList, function (tr, i)
【讨论】:
我得到了输出 -1 而不是 89,我从 android 8 和 9 中的 android 5.1[INFO:CONSOLE(15)] "found at:", source: (15) D: -1
中的 android 8 和 9 INFO:CONSOLE(15)] "found at: 88", source: (15) D: 89
中获得了 89
那我猜你需要用一个简单的 for like for (var i = 1; i <= trList.length; i++)
有了 for 循环,我得到了 Uncaught SyntaxError: Unexpected token ')'
,所以我删除了 ),得到了 Uncaught ReferenceError: tr is not defined
是的,如果你使用一个简单的for
循环,最后你就不需要额外的)
。您需要将所有tr
替换为trList[i]
。我会编辑我的答案,因为它不起作用
对,我从 1 开始,而不是 0,我编辑了我的答案,看看它现在是否有效【参考方案2】:
试试这个:
const trList = Array.from(document.querySelectorAll('#main_table_countries_today > tbody > tr'))
【讨论】:
感谢您的回答,我现在收到此错误 Uncaught TypeError: Array.from is not a function【参考方案3】:querySelectorAll()
返回一个nodeList
。使用Array.from()
将其转换为数组:
const trList = Array.from(document.querySelectorAll('#main_table_countries_today > tbody > tr'))'
【讨论】:
感谢您的回答,我现在收到此错误Uncaught TypeError: Array.from is not a function
@JDEVss 你用的是什么浏览器?当前兼容性 > developer.mozilla.org/en-US/docs/Web/javascript/Reference/…
我使用的是 android 5.1 webview,代码适用于 android 8 和 9 但不适用于 android 5.1
您可以使用基本的 for 循环对其进行迭代。做; for(let i =0; i < trList.length;i++)...
@JDEVss 更新您的设备,您的原始代码应该可以工作。 Lollipop 设备可以使用最新版本的 WebView。【参考方案4】:
QuerySelectorAll 返回一个不是真正的 JS 数组的 nodeList。您必须将其转换为具有所有 Array 方法的真正 JS Array。
我创建了一个实用函数来为我做这件事。
function nodeListToArray(elem)
return [].slice().call(elem);
那你就这样用吧。
const trList = document.querySelectorAll('#main_table_countries_today > tbody > tr');
const trArr = nodeListToArray(trList);
“trArr”将具有 forEach 方法。
【讨论】:
我是一个js初学者,这对我来说很难,你能帮忙写代码吗? 谢谢你的回答,我得到了Uncaught TypeError: [].slice(...).call is not a function
以上是关于未捕获的 TypeError:forEach 不是 javascript 函数中的函数错误的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的TypeError:(中间值).map不是函数[重复]
JQuery UI'可拖动不是函数'未捕获的TypeError
未捕获的 TypeError:Vue.elementDirective 不是函数
未捕获的 Promise 错误:TypeError:成员不是函数