如何检查DOM节点是否是`html`节点

时间:2013-10-22 20:51:16

标签: javascript dom

编辑:这是我问过的最愚蠢的问题。我会保留它,提醒自己不要太快问问题。

如何检查我选择的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节点(divspan等)。问题是我的代码爬行DOM并检查某个属性;如果代码找不到该属性,它将到达html节点并因此行引发错误:

if (node.tagName.toUpperCase() !== 'OBJECT') { }

TypeErrornode节点时会抛出html,因为node.TagName未定义。

提前致谢。

2 个答案:

答案 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]