论坛首页 Web前端技术论坛

IE8修了个bug Prototypejs出了个bug

浏览 4494 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-27  

今天在IE8上发现了一个问题。用js(用了prototypejs)创建的element,设置了它的class以后,浏览器没有“正确”的对其使用css样式。

 

创建element的语句如下:

 

var wrapper = new Element('div', { className: 'wrapper' });
 

标准地设置element的class属性应该是:

 

 

ele.setAttribute('class', 'wrapper');

 

但是IE6, IE7都有BUG,以上语句不起作用,但以下语句可以:

 

 

element.setAttribute('className', 'wrapper');
  

prototypejs替“我们”解决了这个不兼容的问题,将setAttribute包了一层,变成了writeAttribute。writeAttribute中做了一个自动的映射,“我们”统一都使用className作为key,如果不是IE,那么会把'className'映射成'class',new Element(xxxxxx)内部是用了writeAttribute来设置Attribute的。所以,在IE8出来以前,天下太平......

 

好了,现在IE8来了,MS的工程师们终于发现了这个BUG,并把它给修正了... 现在setAttribute('class', xxx)有效,而setAttribute('className', xxx)无效了 @_@

 

prototypejs要修正这个bug,得对IE的版本分类讨论了... 不过我发现

 

 

var ele = new Element('div');
ele.className = 'wrapper';

 

在主流浏览器上都有效。

 

额外说一句,在IE8中, margin: 0 auto; 需要在其父节点的样式中定义text-align: center后才正常显示......

 

   发表时间:2009-03-27  
额外说一句,在IE8中, margin: 0 auto; 需要在其父节点的样式中定义text-align: center后才正常显示......


囧囧囧囧囧囧囧囧囧囧....真的要这样....?
0 请登录后投票
   发表时间:2009-03-27  
原来是你啊
0 请登录后投票
   发表时间:2009-03-29  
playfish 写道
额外说一句,在IE8中, margin: 0 auto; 需要在其父节点的样式中定义text-align: center后才正常显示......


囧囧囧囧囧囧囧囧囧囧....真的要这样....?


你提到的这个应该是IE旧版本的 Quirks mode下的解析BUG,
可查一下IE8下是否HTML文档DTD声明是否规范

否则IE8应该不会出现这种解析BUG
0 请登录后投票
   发表时间:2009-03-30  
一直用 el.className 解决兼容性问题哦

margin: 0 auto 在ie8下失效的问题,是因为某些插件(比如CompanionJS)或其它因素触发了Quirks mode(IE 5.5的bug)
0 请登录后投票
   发表时间:2009-03-30  
lifesinger 写道
一直用 el.className 解决兼容性问题哦

margin: 0 auto 在ie8下失效的问题,是因为某些插件(比如CompanionJS)或其它因素触发了Quirks mode(IE 5.5的bug)


页面的DTD是没有问题的,反正一开始表现的很奇怪,页面第一次加载的时候是正常的,F5之后就不正常了,异常的表现确实就如Quirks mode表现的一样。还有,我确实装了CompanionJS... 具体原因我再查查
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics