JavaScript isDOM - 如何检查JavaScript对象是否为DOM对象? [英] JavaScript isDOM -- How do you check if a JavaScript Object is a DOM Object?

查看:126
本文介绍了JavaScript isDOM - 如何检查JavaScript对象是否为DOM对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图得到:

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 Chrom)
    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,Level2

更新2 :这是我在自己的库中实现的:
(以前的代码在Chrome中不起作用,因为Node和HTMLElement是函数,而不是预期的对象,该代码在FF3,IE7,Chrome 1和Opera 9中进行测试)

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 isDOM - 如何检查JavaScript对象是否为DOM对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆