问题原因
在封装一个动画方法中我需要根据用户传入的参数去选择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';
};