今天在学习中遇到了在ie中设置class属性值的bug,现写出来与大家分享,一起共勉,如有错漏望不吝指正。
如:
elm.setAttribute('class', 'className');
在IE6/7中样式“className”并没有起作用,虽然使用elm.getAttribute('class')是可以获取到“className”。
后来上网查了一些资料,发现了在ie中其实还有一部分属性也会有这样的问题,像for属性
<label>姓名:</label>
<input type="checkbox" id="name"/>
<script>
var lab = document.getElementsByTagName('label')[0];
lab.setAttribute('for', 'name');
</script>
理论上如果lab设置了for属性,点击label时会自动将对应的checkbox选中。但在IE6/7点击并没有选中相应的checkbox。
而且类似的情况还发生在 cellspacing/cellpadding 等属性上,现列出来,大家可以认一下,以后做的时候可以注意一下:
class
for
cellspacing
cellpadding
tabindex
readonly
maxlength
rowspan
colspan
usemap
frameborder
contenteditable
所以,当在写一个通用的跨浏览器的设置元素属性的接口方法时,我们就需要考虑注意以上属性在IE6/7中的特殊性。
网上就有位朋友写了如下方法以解决上面的问题:
dom = (function() {
var fixAttr = {
tabindex: 'tabIndex',
readonly: 'readOnly',
'for': 'htmlFor',
'class': 'className',
maxlength: 'maxLength',
cellspacing: 'cellSpacing',
cellpadding: 'cellPadding',
rowspan: 'rowSpan',
colspan: 'colSpan',
usemap: 'useMap',
frameborder: 'frameBorder',
contenteditable: 'contentEditable'
},
div = document.createElement( 'div' );
div.setAttribute('class', 't');
var supportSetAttr = div.className === 't';
return {
setAttr : function(el, name, val) {
el.setAttribute(supportSetAttr ? name : (fixAttr[name] || name), val);
}
getAttr : function(el, name) {
return el.getAttribute(supportSetAttr ? name

fixAttr[name] || name));
}
}
})();
首先,标准浏览器直接使用原始属性名;其次,IE6/7非以上列举的属性仍然用原始属性名;最后这些特殊属性(与JS关键字同名如for,class)使用fixAttr。
到了这里,我们就不用考虑className/htmlFor了,直接使用class/for即可。
dom.setAttr(el, 'class', 'red');
dom.getAttr(el, 'class');
dom.setAttr(el, 'for', 'userName');
dom.getAttr(el, 'for');
分享到:
相关推荐
然而,在IE6和IE7中,它并不支持像"class"、"for"、"rowspan"和"colspan"这样的属性。 `class`属性通常用于定义HTML元素的CSS类,以便应用样式。例如,`el.setAttribute('class', 'abc')`在标准浏览器中会为元素...
本文将详细讨论一个特定的问题,即在IE6/7中使用JavaScript的setAttribute方法设置table的cellpadding和cellspacing属性时出现的bug。 首先,我们需要了解`cellpadding`和`cellspacing`属性。这两个属性是HTML中...
标题“IE6用setAttribute添加事件无效”涉及到的是一个在JavaScript编程中常见的问题,尤其是在处理旧版Internet Explorer(尤其是IE6)浏览器时。在现代浏览器中,`setAttribute`方法可以方便地为HTML元素添加属性...
在Web开发中,兼容性问题始终是一个棘手的挑战,尤其是在处理老版本的浏览器时,如Internet Explorer(IE)6和7。这个问题涉及到`getAttribute`方法在获取`href`和`src`属性时,对于相对路径0值的处理方式与其他...
然而,需要注意的是,某些旧版浏览器(如IE6和IE7)并不支持使用`setAttribute`方法来设置class属性。这可能会导致这些浏览器中的元素不能正确地应用新的class样式。 接着,第二种方法涉及到`className`属性: 2. ...
在 Firefox 中,使用 setAttribute("class","red") 可以正确地设置元素的 class 属性,而在 IE 中,使用 setAttribute("class","red") 将导致元素上显示两个 class 属性,这是因为 IE 浏览器将自定义的 class 和系统...
- 在设置`colSpan`和`rowSpan`属性时,属性名应当首字母大写,即`colSpan`和`rowSpan`,这是JavaScript中属性命名的规范。 - 如果要在页面加载完毕之后立即执行脚本,应该将JavaScript代码放置在`<body>`标签的底部...
6. **rowspan、colspan**:`rowspan`和`colspan`属性在IE6和IE7中应该分别设置为`rowSpan`和`colSpan`。 7. **usemap**:在IE6和IE7中,`usemap`属性需要设置为`useMap`。 8. **frameborder**:`frameborder`属性在...
本篇文章主要探讨了如何在不同的浏览器环境下实现这一功能,特别是针对老版本的Internet Explorer(IE6、IE7、IE8)以及Firefox 3。 首先,对于IE6浏览器,由于其对HTML和JavaScript的支持相对有限,可以简单地通过...
- IE6/7/8不支持opacity属性,可以通过alpha滤镜来实现类似效果,但需要注意触发元素的haslayout。 - IE6/7/8会导致产生的节点错误继承某些属性,如background,修改一个属性会影响到另一个属性。 - 获取计算出的...
解决这一兼容性问题,涉及到几个关键点:IE8对某些DOM属性支持的差异、HTML元素事件属性的兼容性以及代码执行方式。 IE8不支持`setAttribute`方法来设置事件处理器是产生兼容性问题的核心原因。在标准模式下,IE8及...
不过,需要注意的是,IE并不支持使用`setAttribute()`来设置某些特定属性,特别是对象属性、集合属性和事件属性,如`style`和`onclick`。在这种情况下,我们应该使用点符号法(dot notation)来代替: ```...
- Firefox支持`setAttribute('class', 'styleClass')`,但IE中需要使用`setAttribute('className', 'styleClass')`,因为IE将`class`视为保留关键字。 #### 三、事件绑定 - **设置点击事件**: 在绑定事件处理程序...
在ArcGIS for Android开发中,`FeatureLayer`是核心组件之一,它允许开发者在地图上显示和操作地理特征。本文将深入探讨`FeatureLayer`的属性更新,通过一个简单的例子来展示这一关键功能的实现。 首先,理解`...
### 支持IE9的JavaScript技术详解 #### 引言 在Web开发过程中,兼容性问题一直是开发者关注的重点之一。特别是在处理旧版本浏览器时,如何确保网页应用能够正常运行成为了一项挑战。本文将深入探讨如何让...
设置元素的样式属性时,使用`setAttribute`方法在IE中可能会不起作用。 **解决方法:** 1. **内联样式:** 使用`style.cssText`属性来设置样式: ```javascript var obj = document.getElementById("some...