How do you check if a JavaScript Object is a DOM Object?

后端 未结 30 2738
-上瘾入骨i
-上瘾入骨i 2020-11-22 16:06

I\'m trying to get:

document.createElement(\'div\')  //=> true
{tagName: \'foobar something\'}  //=> false

In my own scripts, I used

30条回答
  •  爱一瞬间的悲伤
    2020-11-22 16:36

    Perhaps this is an alternative? Tested in Opera 11, FireFox 6, Internet Explorer 8, Safari 5 and Google Chrome 16.

    function isDOMNode(v) {
      if ( v===null ) return false;
      if ( typeof v!=='object' ) return false;
      if ( !('nodeName' in v) ) return false; 
    
      var nn = v.nodeName;
      try {
        // DOM node property nodeName is readonly.
        // Most browsers throws an error...
        v.nodeName = 'is readonly?';
      } catch (e) {
        // ... indicating v is a DOM node ...
        return true;
      }
      // ...but others silently ignore the attempt to set the nodeName.
      if ( v.nodeName===nn ) return true;
      // Property nodeName set (and reset) - v is not a DOM node.
      v.nodeName = nn;
    
      return false;
    }
    

    Function won't be fooled by e.g. this

    isDOMNode( {'nodeName':'fake'} ); // returns false
    

提交回复
热议问题