Extjs 3.3 tree以下的版本在IE10无法点击的解决办法

小编:管理员 506阅读 2022.09.07

距上篇文章已过去好几天了,说好的一周发表1到3篇文章,难道都让狗吃了吗?现在才发布一篇而且还是转载的文章。 好了,闲话少叙,切入正题,Extjs前端框架是比较早的前端mvc框架了,可能很多人都没接触过,而且现在也很少有项目用Extjs框架搭建了,原因是什么?那就不得而知了,有人说是Extjs比较重…… 在使用Extjs3.3及以下的版本,在IE10环境中却无法点击树节点,而在IE的其他版本(IE7,IE8,IE9,IE11)均可正常。经过在网上查找资料得知,原因是因为Extjs3.3的ext-all.js中的getAttribute方法不能兼容IE10出错引起。 以下是Extjs3.3的ext-all.js的getAttribute方法

etAttribute : Ext.isIE ? function(name, ns){
   var d = this.dom,
   type = typeof d[ns + ":" + name];

   if(['undefined', 'unknown'].indexOf(type) == -1){
      return d[ns + ":" + name];
    }
 return d[name];
} : function(name, ns){
   var d = this.dom;
   return d.getAttributeNS(ns, name) || d.getAttribute(ns + ":" + name) || d.getAttribute(name) || d[name];
},
复制

Extjs3.4的ext-all.js的getAttribute方法

getAttribute: (function(){
   var test = document.createElement('table'),
   isBrokenOnTable = false,
   hasGetAttribute = 'getAttribute' in test,
   unknownRe = /undefined|unknown/;

   if (hasGetAttribute) {
    try {
        test.getAttribute('ext:qtip');
     } catch (e) {
       isBrokenOnTable = true;
    }

  return function(name, ns) {
    var el = this.dom,
    value;

   if (el.getAttributeNS) {
     value = el.getAttributeNS(ns, name) || null;
   }

  if (value == null) {
    if (ns) {
      if (isBrokenOnTable && el.tagName.toUpperCase() == 'TABLE') {
        try {
           value = el.getAttribute(ns + ':' + name);
         } catch (e) {
          value = '';
         }
      } else {
        value = el.getAttribute(ns + ':' + name);
    }
  } else {
    value = el.getAttribute(name) || el[name];
  }
 }
 return value || '';
 };
} else {
  return function(name, ns) {
     var el = this.om,
     value,
     attribute;

     if (ns) {
        attribute = el[ns + ':' + name];
        value = unknownRe.test(typeof attribute) ? undefined : attribute;
     } else {
      value = el[name];
     }
   return value || '';
   };
}
  test = null;
})(),
复制

将3.4中的方法覆盖3.3的ext-all.js中,ie10中tree恢复正常。

关联标签: