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("*")