今天在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后才正常显示......