如何检查JavaScript对象是否为DOM对象? [英] How do you check if a JavaScript Object is a DOM Object?
问题描述
我正在尝试获取:
document.createElement('div') //=> true
{tagName: 'foobar something'} //=> false
在我自己的脚本中,我以前只用它,因为我从来不需要 tagName
作为属性:
In my own scripts, I used to just use this since I never needed tagName
as a property:
if (!object.tagName) throw ...;
因此,对于第二个对象,我想出了以下方法作为一种快速解决方案-大部分都可以。 ;)
So for the second object, I came up with the following as a quick solution -- which mostly works. ;)
问题是,这取决于浏览器是否强制执行只读属性,而并非所有人都这样做。
The problem is, it depends on browsers enforcing read-only properties, which not all do.
function isDOM(obj) {
var tag = obj.tagName;
try {
obj.tagName = ''; // Read-only for DOM, should throw exception
obj.tagName = tag; // Restore for normal objects
return false;
} catch (e) {
return true;
}
}
是否有好的替代品?
推荐答案
这可能很有趣:
function isElement(obj) {
try {
//Using W3 DOM2 (works for FF, Opera and Chrome)
return obj instanceof HTMLElement;
}
catch(e){
//Browsers not supporting W3 DOM2 don't have HTMLElement and
//an exception is thrown and we end up here. Testing some
//properties that all elements have (works on IE7)
return (typeof obj==="object") &&
(obj.nodeType===1) && (typeof obj.style === "object") &&
(typeof obj.ownerDocument ==="object");
}
}
它是 DOM,级别2 。
更新2 :这是我在自己的库中实现的方式:
(以前的代码在Chrome中不起作用,因为Node和HTMLElement是函数
Update 2: This is how I implemented it in my own library: (the previous code didn't work in Chrome, because Node and HTMLElement are functions instead of the expected object. This code is tested in FF3, IE7, Chrome 1 and Opera 9).
//Returns true if it is a DOM node
function isNode(o){
return (
typeof Node === "object" ? o instanceof Node :
o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName==="string"
);
}
//Returns true if it is a DOM element
function isElement(o){
return (
typeof HTMLElement === "object" ? o instanceof HTMLElement : //DOM2
o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName==="string"
);
}
这篇关于如何检查JavaScript对象是否为DOM对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!