获取 HTML 正文中的所有元素

Get All Elements in HTML body

我正在尝试编写一个 Javascript 函数来获取 HTML 正文中的所有元素。 我试过类似的东西:

function getAllElements(){
        let el = document.body.childNodes;
        for(var i=0; i<el.length; i++)
        {
            if(el[i].getAttribute("id") != "monkeyparentdiv" || el[i].getAttribute("id") != "monkeydiv"
            || el[i].getAttribute("id") != "monkeyspan1" || el[i].getAttribute("id") != "monkeyspan2")
            {
                el[i].classList.add("opacityformonkey");
            }
        }
}

在 CSS 我有

.opacity-for-monkey{
    animation-name: burnImage;
    animation-duration: 1s;
    animation-fill-mode: forwards;
}

@keyframes burnImage {
    from {
        opacity: 1
    }
    to {
        opacity: 0.3
    }
}

长话短说我想将所有元素的不透明度设置为 0.3,除了 if 条件中提到的元素。
但它给我一个错误:

el[i].getAttribute is not a function.

我做错了什么?

document.body.childNodes returns all types of nodes including text nodes that don't have attributes. You should use document.body.children 代替。

此外,您的 JavaScript 代码添加了 class opacityformonkey(无连字符),但在 CSS 中您有 opacity-for-monkey(带连字符)。

所有子节点可能不是一个元素。您还必须检查文本节点并排除它们。这是您的代码的修改版本:

function getAllElements(){
    let el = document.body.childNodes;
    for(var i=0; i<el.length; i++){
        if (el[i].nodeType != Node.TEXT_NODE){
            if(el[i].getAttribute("id") != "monkeyparentdiv" || el[i].getAttribute("id") != "monkeydiv"
            || el[i].getAttribute("id") != "monkeyspan1" || el[i].getAttribute("id") != "monkeyspan2")
            {
                el[i].classList.add("opacityformonkey");
            }
        }
    }
}