处理 IE 兼容性问题时,一般会进行一些嗅探操作,如何更好的解决这个问题呢?
例如下面自定义绑定事件函数:
标准写法
var addEvent = function(ele, type, handler) {
// 非IE浏览器
if (window.addEventListener) {
return ele.addEventListener(type, handler, false);
}
// IE浏览器
if (window.attachEvent) {
return ele.attachEvent('on'+type, handler);
}
};
改进一
优点: 不用每次都执行条件语句判断
缺点: 这个函数如果用不到,仍然会执行一次判断
var addEvent = (function(ele, type, handler) {
// 非IE浏览器
if (window.addEventListener) {
return function(ele, type, handler) {
ele.addEventListener(type, handler, false);
};
}
// IE浏览器
if (window.attachEvent) {
return function(ele, type, handler) {
ele.attachEvent('on' + type, handler);
};
}
})();
改进二
优点: 只有第一次调用时,会执行一次条件语句
var addEvent = function(ele, type, handler) {
// 非IE浏览器
if (window.addEventListener) {
addEvent = function(ele, type, handler) {
ele.addEventListener(type, handler, false);
};
} else if (window.attachEvent) {
// IE浏览器
addEvent = function(ele, type, handler) {
ele.attachEvent('on' + type, handler);
};
}
addEvent(ele, type, handler);
};