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

Javascript 如何检查对象是否是DOM元素?,javascript,dom,Javascript,Dom,我有一个功能: function Check(o) { alert(/* o is a DOM element ? "true" : "false" */); } 如何检查参数o是否为DOM对象?检查节点名属性是否存在 基本上检查它是否是节点:查看,检查节点定义 如果您所说的元素检查标记名属性是字面意思,请查看同一规范中的元素定义 简单地说,你也可以这样做 function Check(o) { alert(o.tagName ? "true" : "false"); } 检

我有一个功能:

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

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

检查
节点名属性是否存在

基本上检查它是否是
节点
:查看,检查节点定义

如果您所说的
元素
检查
标记名
属性是字面意思,请查看同一规范中的元素定义

简单地说,你也可以这样做

function Check(o)
{
    alert(o.tagName ? "true" : "false");
}
检查它是否是DOM元素或

function Check(o)
{
    alert(o.nodeName ? "true" : "false" );
}

要检查它是否是DOM节点,可以使用以下函数

function isNode(o)
{
  return o && 'nodeType' in o;
}

我不只是检查属性是否存在,而是检查它的特定值

这假设您正在寻找“类型1”元素


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

DOM元素实现
元素
接口。因此,您可以使用:

功能检查(o){
警报(o元素实例);
}

延迟回答,但文档片段也可以是节点:

function isNode(node) {
    return node && (node.nodeType === 1 || node.nodeType == 11);
}

积分:

您可以使用JQuery检查DOM节点是否为元素:

element.is("*")


任何DOM节点或特定类型的节点?@patrick Any。要检查特定的标记名,我只需检查标记名是否正确?否,
标记名
将给出“类型1”元素的类型。还有其他几种类型的节点。您可以尝试/捕获DOM保留函数:
函数检查(n){try{n.cloneNode()}catch(e){return false;}return true}
节点类型
,或者根
DOMElement
对象的任何其他属性。这听起来不太可靠。如果存在具有该属性名称的对象,该怎么办?这是唯一的办法吗?我认为可能还有其他东西…你可以通过检查所有(或至少两个或三个)属性和方法使其更安全,这些对象必须符合规范,但这似乎有些过分…@Martin不需要这些引用。只需使用
true:false
o元素的instanceof
将“更安全”i我相信它应该是
'nodeType'在o
中,但这是一个干净的好主意@BenRowe:Nate Barr是对的,
'nodeType'
应该用引号括起来,否则,你的代码会导致“ReferenceError:nodeType未定义”,所以请编辑你的帖子!谢谢,我会进行调整这不会检查对象是否是元素,而是检查它是否是节点。参见此处的Constantes部分,较短的版本是:obj&&obj.nodeType===1该jQuery如何?很遗憾,它不能替换“typeof”,但这是因为它们以不同的方式比较不同的东西(原语与对象/构造函数)typeof'返回一元运算符,而instanceof'返回二元(布尔)运算符。我以前确实提出过这个答案,但需要注意的是,如果由来自不同上下文的元素类验证,则不会通过。所以,如果这个检查对你不起作用,你可以尝试更温和的方法,比如@Martin Jespersen
element.is("*")