如何检查对象是否是DOM元素?

Bru*_*oLM 36 javascript dom

我有一个功能:

function Check(o)
{
    alert(/* o is a DOM element ? "true" : "false" */);
}
Run Code Online (Sandbox Code Playgroud)

如何检查参数o是否是DOM对象?

Dav*_*ing 71

DOM元素实现Element接口.所以你可以使用:

function Check(o) {
    alert(o instanceof Element);
}
Run Code Online (Sandbox Code Playgroud)

  • 我过去确实提出过这个答案,但需要注意的是,如果由来自不同上下文的 Element 类验证,这将不会通过。/sf/ask/3655556621/ 所以如果这个检查对你不起作用,你可以尝试更软的方法,比如@Martin Jespersen (2认同)

Mar*_*sen 25

检查nodeName属性是否存在.

基本上检查它是否是Node:查看DOM lvl 1规范,检查节点定义.

如果您在Element检查tagName属性时的字面意思,请查看相同规范中的元素定义

所以回顾一下,做其中之一

function Check(o)
{
    alert(o.tagName ? "true" : "false");
}
Run Code Online (Sandbox Code Playgroud)

检查它是否是DOM元素或

function Check(o)
{
    alert(o.nodeName ? "true" : "false" );
}
Run Code Online (Sandbox Code Playgroud)

检查它是否是DOM节点

  • `o instanceof Element`将是"更安全"的IMO (7认同)
  • 这听起来没有防弹.如果有一个具有该属性名称的对象怎么办?这是唯一的方法吗?我可能还有别的东西...... (5认同)
  • @Martin不需要那些报价.只需使用`true:false` (4认同)

use*_*716 9

我不会检查属性是否存在,而是检查其特定值.

这假设您正在寻找"类型1"元素.

nodeType at MDC(文档)

function Check(o) {
    alert( o && o.nodeType && o.nodeType === 1 );
}
Run Code Online (Sandbox Code Playgroud)

您仍然可以获得一个对象,该对象具有nodeType实际上不是DOM节点的属性,但它也必须具有匹配值1才能给出误报.

  • 较短的版本是:obj && obj.nodeType === 1 (4认同)