如何检查我选择的DOM节点是否为html
节点?我注意到它没有通常的属性。例如:
var div = document.getElementsByTagName('div')[0];
var html = document.getElementsByTagName('html');
div instanceof HTMLElement; // true
html instanceof HTMLElement; // false
div.tagName; // "DIV"
html.tagName; // undefined
特别是,我希望检查适用于所有DOM节点(div
,span
等)。问题是我的代码爬行DOM并检查某个属性;如果代码找不到该属性,它将到达html
节点并因此行引发错误:
if (node.tagName.toUpperCase() !== 'OBJECT') { }
当TypeError
是node
节点时会抛出html
,因为node.TagName
未定义。
提前致谢。
答案 0 :(得分:2)
问题是您正在查看getElementsByTagName
返回的数组而不是返回的第一个元素。试试这个:
var div = document.getElementsByTagName('div')[0];
var html = document.getElementsByTagName('html')[0]; // notice [0]
div instanceof HTMLElement; // true
html instanceof HTMLElement; // true
div.tagName; // "DIV"
html.tagName; // "HTML"
注意:在Chrome开发者工具版本30.0.1599.101 m中测试
答案 1 :(得分:1)
您的变量html
不是单个节点,因此它与div
不同。像你的div参考一样添加缺失的[0]
!