Ie9 ext tree 失效

  我看到好多网上实现ie9ext tree的办法都是通过渲染模式为ie8 或者更低的浏览器,其实现的代码都是添加meta标记(<metahttp-equiv="X-UA-Compatible" content="IE=8" />),这样是可以解决ie9中面板事件失效的问题,但是这不是一个最终的解决办法,通过我一天的调试研究,我修改了下ext-all.js的代码,之后通过一步一步调试,才解决了ie9的这个问题.. 下面我详细说下哪里错了,具体怎么改,以后我们应该注意什么.

1.      哪里错了:

a)   得到ext-all.js的未压缩版,我是得到ext-all.js的压缩版,然后通过js美化,得到清晰地版本,解压的地址为(http://app.baidu.com/webkits)
b)   然后找到相应的代码块getAttributeNS 属性所对应的函数属性所对应的函数,代码如下:

[javascript]   view plain copy
  1. getAttributeNS: Ext.isIE ?  
  2.         function (ns, name) {  
  3.             var  d =  this .dom;  
  4.             var  type =  typeof  d[ns +  ":"  + name];  
  5.             if  (type !=  "undefined"  && type !=  "unknown" ) {  
  6.                 return  d[ns +  ":"  + name]  
  7.             }  
  8.             return  d[name]  
  9.         }: function (ns, name) {  
  10.             var  d =  this .dom;  
  11.             return  d.getAttributeNS(ns, name) || d.getAttribute(ns +  ":"  + name) || d.getAttribute(name) || d[name]  
  12.         }  
(c)  首先这个方法的作用是: 通过命名空间 URI 和名称来获取属性值。
参数描述
ns
必需。规定从中获取属性值的命名空间 URI。
name必需。规定从中取得属性值的属性。
(d)  这段代码在ie9中取属性值得方式错了. 在这块是通过数组的行式来取 取出来的值是null类型,

2.      怎么改:

将数组的取值方式改为是通过attribute的类型来取.代码如下(为了兼容其他的类型,可能我还对操作属性还不是很理解透彻,所以做的保险一点,不修改原来的代码在后面添加代码 ):

[javascript]   view plain copy
  1. getAttributeNS: Ext.isIE?  
  2.             function (ns, name) {  
  3.                 var  d =  this .dom;  
  4.                 var  type =  typeof  d[ns +  ":"  + name];  
  5.                 if  (type !=  "undefined"  && type !=  "unknown" ) {  
  6.                     return  d[ns +  ":"  + name]  
  7.                 }  
  8.                 type = typeof  d[name];  
  9.                 if (type !=  "undefined"  && type !=  "unknown" )  
  10.                 {  
  11.                     return  d[name];  
  12.                 }  
  13.                 type=typeof  d.getAttribute(ns +  ":"  + name);  
  14.                 if (type !=  "undefined"  && type !=  "unknown" )  
  15.                 {  
  16.                     return  d.getAttribute(ns +  ":"  + name);  
  17.                 }  
  18.                 type=typeof  d.getAttribute(name);  
  19.                 if (type !=  "undefined"  && type !=  "unknown" )  
  20.                 {  
  21.                     return  d.getAttribute(name);  
  22.                 }  
  23.                 return   null ;  
  24.         }: function (ns, name) {  
  25.             var  d =  this .dom;  
  26.             return  d.getAttributeNS(ns, name) || d.getAttribute(ns +  ":"  + name) || d.getAttribute(name) || d[name]  
  27.         }  

我只是在它后面多添加了几次判断,如果没有走方法体内的return,那么就会往下执行,这样可以不会影响ext其他的影响..

3.      今后应该注意什么:

         这个ext tree的 ie9 bug 是在取dom属性的值时候报了错,所以以后在拿什么样的属性,用getAttribute, 什么样的属性用 数组形式取值, 什么浏览器下,用什么取值方式,都得注意一下,现在我还没有对取值方式没有研究透彻,下次blog里面将会详细介绍如何《js  dom对象 属性值》希望大家多多提意见,


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值