Javascript TypeError:document.getElementsByTagName(…)。类名未定义

Javascript TypeError:document.getElementsByTagName(…)。类名未定义,javascript,Javascript,我一直在 TypeError:document.getElementsByTagName…类名未定义 怎么回事,我真的不明白 function test(){ if ( document.getElementsByTagName("body").className.match(/(?:^|\s)test(?!\S)/) ){ document.getElementsByTagName("body").className += " test"; alert(

我一直在

TypeError:document.getElementsByTagName…类名未定义

怎么回事,我真的不明白

function test(){
    if ( document.getElementsByTagName("body").className.match(/(?:^|\s)test(?!\S)/) ){
        document.getElementsByTagName("body").className += " test";
        alert("test");
    }
}

document.onload = test();
请注意,它是getElementsByTagName,而不是getElementByTagName——它是复数形式。它返回一个元素列表

要将类添加到该列表中的第一个元素,请执行以下操作:

if ( document.getElementsByTagName("body")[0].className.match(/(?:^|\s)test(?!\S)/) ){
    document.getElementsByTagName("body")[0].className += " test";
    alert("test");
}
getElementsByTagName返回pSpecified标记的元素数组。例如,如果页面上有100500个div元素,getElementsByTagName将返回一个长度为100500的数组,它将包含所有div元素。当然,数组没有属性className

如果只想选择一个特定的元素,可以为它指定一个id属性,并调用getElementById,它将返回单个元素


在使用getElementsByTagName的情况下,您可以尝试获取元素数组,从中选择第一个项目零索引,然后读取其“className属性”

它的名称为:getElementsByTagName-元素的复数形式。你有一个数组,实际上是一个元素的节点列表,但是你把它当作一个元素。尝试添加[0]以获取第一个匹配元素。但是为什么要麻烦呢?document.body已包含您要查找的标记。document.body.classList.addtest可以很好地完成这个任务。还要注意的是,您的测试函数不会在加载事件时调用。您正在使用调用运算符调用函数:。发生的情况是,将test函数的返回值设置为函数返回未定义的处理程序。解决方案:删除操作符。感谢fok JavaScript1+的可能副本作为旁注,您也可以使用document.body选择body元素。