JS检查变量是否为dom元素

问题原因

在封装一个动画方法中我需要根据用户传入的参数去选择DOM元素,当用户传入字符串的时,方法内部进行选择DOM 。当用户传入对象时检查是否为DOM对象。

判断一个对象是否 DOM ,首先想到的是它是否具有 DOM 对象的各种属性或特征,比如是否有 nodeType 属性,有 tagName 属性,等等。判断的特征越多,也就越可靠,但毕竟我们自定义的 js 对象也可以有那些属性。

在 DOM Level2 标准中定义了一个 HTMLElement 对象,它规定所有的 DOM 对象都是 HTMLElement 的实例,所以可以通过 HTMLElement 进行判断。但在低版本浏览器中不支持。以下是兼容写法

解决方法

var isDOM =
  typeof HTMLElement === 'object'
    ? function(dom) {
        return dom instanceof HTMLElement;
      }
    : function(dom) {
        return dom && typeof obj === 'object' && obj.nodeType === 1 && typeof 	obj.nodeName === 'string';
      };

版权声明:本文为oITCaiNiao1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。