`
zhoushaopingqq
  • 浏览: 945 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

IE6/7中setAttribute不支持class/for/rowspan/colspan等属性

 
阅读更多
今天在学习中遇到了在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 ? namefixAttr[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中setAttribute不支持class/for/rowspan/colspan等属性

    然而,在IE6和IE7中,它并不支持像"class"、"for"、"rowspan"和"colspan"这样的属性。 `class`属性通常用于定义HTML元素的CSS类,以便应用样式。例如,`el.setAttribute('class', 'abc')`在标准浏览器中会为元素...

    IE6/7中使用setAttribute设置table的cellpadding和cellspacing的Bug

    本文将详细讨论一个特定的问题,即在IE6/7中使用JavaScript的setAttribute方法设置table的cellpadding和cellspacing属性时出现的bug。 首先,我们需要了解`cellpadding`和`cellspacing`属性。这两个属性是HTML中...

    IE6用setAttribute添加事件无效

    标题“IE6用setAttribute添加事件无效”涉及到的是一个在JavaScript编程中常见的问题,尤其是在处理旧版Internet Explorer(尤其是IE6)浏览器时。在现代浏览器中,`setAttribute`方法可以方便地为HTML元素添加属性...

    IE6/7中getAttribute获取href/src 属性(相对路径0值与其它浏览器不同

    在Web开发中,兼容性问题始终是一个棘手的挑战,尤其是在处理老版本的浏览器时,如Internet Explorer(IE)6和7。这个问题涉及到`getAttribute`方法在获取`href`和`src`属性时,对于相对路径0值的处理方式与其他...

    js中设置元素class的三种方法小结

    然而,需要注意的是,某些旧版浏览器(如IE6和IE7)并不支持使用`setAttribute`方法来设置class属性。这可能会导致这些浏览器中的元素不能正确地应用新的class样式。 接着,第二种方法涉及到`className`属性: 2. ...

    setAttribute 与 class冲突解决

    在 Firefox 中,使用 setAttribute("class","red") 可以正确地设置元素的 class 属性,而在 IE 中,使用 setAttribute("class","red") 将导致元素上显示两个 class 属性,这是因为 IE 浏览器将自定义的 class 和系统...

    javascript 动态table添加colspan\rowspan 参数的方法

    - 在设置`colSpan`和`rowSpan`属性时,属性名应当首字母大写,即`colSpan`和`rowSpan`,这是JavaScript中属性命名的规范。 - 如果要在页面加载完毕之后立即执行脚本,应该将JavaScript代码放置在`&lt;body&gt;`标签的底部...

    javascript中setAttribute()函数使用方法及兼容性

    6. **rowspan、colspan**:`rowspan`和`colspan`属性在IE6和IE7中应该分别设置为`rowSpan`和`colSpan`。 7. **usemap**:在IE6和IE7中,`usemap`属性需要设置为`useMap`。 8. **frameborder**:`frameborder`属性在...

    本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结

    本篇文章主要探讨了如何在不同的浏览器环境下实现这一功能,特别是针对老版本的Internet Explorer(IE6、IE7、IE8)以及Firefox 3。 首先,对于IE6浏览器,由于其对HTML和JavaScript的支持相对有限,可以简单地通过...

    总结js中的一些兼容性易错的问题

    - IE6/7/8不支持opacity属性,可以通过alpha滤镜来实现类似效果,但需要注意触发元素的haslayout。 - IE6/7/8会导致产生的节点错误继承某些属性,如background,修改一个属性会影响到另一个属性。 - 获取计算出的...

    IE8的JavaScript点击事件(onclick)不兼容的解决方法

    解决这一兼容性问题,涉及到几个关键点:IE8对某些DOM属性支持的差异、HTML元素事件属性的兼容性以及代码执行方式。 IE8不支持`setAttribute`方法来设置事件处理器是产生兼容性问题的核心原因。在标准模式下,IE8及...

    JavaScript中setAttribute用法介绍

    不过,需要注意的是,IE并不支持使用`setAttribute()`来设置某些特定属性,特别是对象属性、集合属性和事件属性,如`style`和`onclick`。在这种情况下,我们应该使用点符号法(dot notation)来代替: ```...

    ajax中的IE和火狐的区别

    - Firefox支持`setAttribute('class', 'styleClass')`,但IE中需要使用`setAttribute('className', 'styleClass')`,因为IE将`class`视为保留关键字。 #### 三、事件绑定 - **设置点击事件**: 在绑定事件处理程序...

    ArcGIS for Android FeatureLayer的属性更新

    在ArcGIS for Android开发中,`FeatureLayer`是核心组件之一,它允许开发者在地图上显示和操作地理特征。本文将深入探讨`FeatureLayer`的属性更新,通过一个简单的例子来展示这一关键功能的实现。 首先,理解`...

    支持ie9的js

    ### 支持IE9的JavaScript技术详解 #### 引言 在Web开发过程中,兼容性问题一直是开发者关注的重点之一。特别是在处理旧版本浏览器时,如何确保网页应用能够正常运行成为了一项挑战。本文将深入探讨如何让...

    IE 不兼容的几个js问题及解决方法

    设置元素的样式属性时,使用`setAttribute`方法在IE中可能会不起作用。 **解决方法:** 1. **内联样式:** 使用`style.cssText`属性来设置样式: ```javascript var obj = document.getElementById("some...

Global site tag (gtag.js) - Google Analytics