Javascript TypeError:document.getElementsByTagName(…)。类名未定义
我一直在 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(
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元素。