浏览 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后才正常显示......
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-27
额外说一句,在IE8中, margin: 0 auto; 需要在其父节点的样式中定义text-align: center后才正常显示......
囧囧囧囧囧囧囧囧囧囧....真的要这样....? |
|
返回顶楼 | |
发表时间:2009-03-27
原来是你啊
|
|
返回顶楼 | |
发表时间:2009-03-29
playfish 写道 额外说一句,在IE8中, margin: 0 auto; 需要在其父节点的样式中定义text-align: center后才正常显示......
囧囧囧囧囧囧囧囧囧囧....真的要这样....? 你提到的这个应该是IE旧版本的 Quirks mode下的解析BUG, 可查一下IE8下是否HTML文档DTD声明是否规范 否则IE8应该不会出现这种解析BUG |
|
返回顶楼 | |
发表时间:2009-03-30
一直用 el.className 解决兼容性问题哦
margin: 0 auto 在ie8下失效的问题,是因为某些插件(比如CompanionJS)或其它因素触发了Quirks mode(IE 5.5的bug) |
|
返回顶楼 | |
发表时间:2009-03-30
lifesinger 写道 一直用 el.className 解决兼容性问题哦
margin: 0 auto 在ie8下失效的问题,是因为某些插件(比如CompanionJS)或其它因素触发了Quirks mode(IE 5.5的bug) 页面的DTD是没有问题的,反正一开始表现的很奇怪,页面第一次加载的时候是正常的,F5之后就不正常了,异常的表现确实就如Quirks mode表现的一样。还有,我确实装了CompanionJS... 具体原因我再查查 |
|
返回顶楼 | |