TypeError: element.forEach is not a function

TypeError: element.forEach is not a function

我想做一个 Chrome 扩展,用我选择的词替换词 'Corona Virus'。在我的 script.js 中,我使用了一个递归函数来检查是否有任何子节点。 `

replaceText(document.body)

function replaceText(element){
    if(element.hasChildNodes()){
        element.forEach(replaceText);
    } else if(element.nodeType === Text.TEXT_NODE) {
        element.textContent = element.textContent.replace(/coronavirus/gi,
            'Blehh')
    }
}`

在我的控制台中,我收到一条错误消息,提示 Uncaught TypeError: element.hasChildNodes.forEach is not a functionUncaught TypeError: Cannot read property 'forEach' of undefined。发生此错误的任何原因?

元素没有 forEach 方法。 (它们所具有的 hasChildNodes 函数也没有。)它们不是数组或 NodeLists.

在现代浏览器上,element.childNodesforEach,因为它是 NodeList,几年前他们有 forEach(和可迭代性),所以:

element.childNodes.forEach(replaceText);

在尚未添加的旧浏览器上,您可以使用 Array.from 获取真正的数组,然后使用 forEach:

Array.from(element.childNodes).forEach(replaceText);

或者您可以在 NodeList.

上进行 polyfill