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

 更新时间:2011年08月28日 18:08:53   作者:  
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性的说明,需要的朋友可以参考下。
如设置class属性
复制代码 代码如下:
el.setAttribute('class', 'abc');

在IE6/7中样式“abc”将没有起作用,虽然使用el.getAttribute('class')能取到值“abc”。

又如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');

相关文章

  • JS给元素注册事件的代码

    JS给元素注册事件的代码

    麦鸡的TAB切换功能代码
    2008-10-10
  • JavaScript 事件流、事件处理程序及事件对象总结

    JavaScript 事件流、事件处理程序及事件对象总结

    JS与HTML之间的交互通过事件实现。事件就是文档或浏览器窗口中发生的一些特定的交互瞬间。可以使用监听器(或处理程序)来预定事件,以便事件发生时执行相应的代码。本文将介绍JS事件相关的基础知识。
    2017-04-04
  • js 将线性数据转为树形的示例代码

    js 将线性数据转为树形的示例代码

    这篇文章主要介绍了js 将线性数据转为树形的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • bootstrap 下拉多选框进行多选传值问题代码分析

    bootstrap 下拉多选框进行多选传值问题代码分析

    项目开发遇到个问题,就是引入bootstrap下拉多选框进行多选的时候,用form表单提交到后台,获取不到多选的值,只能获取的选择的第一个值,怎么回事呢?下面小编给大家分析下bootstrap 下拉多选框进行多选传值问题,一起看看吧
    2017-02-02
  • JS中的六种继承方式以及优缺点总结

    JS中的六种继承方式以及优缺点总结

    JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一,那么如何在JS中实现继承呢?下面这篇文章主要给大家介绍了关于JS中六种继承方式以及优缺点的相关资料,需要的朋友可以参考下
    2021-10-10
  • javascript中直接引用Microsoft的COM生成Word

    javascript中直接引用Microsoft的COM生成Word

    直接引用Microsoft的COM是可以生成Word的,下面为大家介绍下实现的javascript代码
    2014-01-01
  • ES6中new Function()语法及应用实例分析

    ES6中new Function()语法及应用实例分析

    这篇文章主要介绍了ES6中new Function()语法及应用,结合实例形式分析了ES6中new Function()的基本语法、功能、原理、闭包等相关使用技巧,需要的朋友可以参考下
    2020-02-02
  • javascript 用函数语句和表达式定义函数的区别详解

    javascript 用函数语句和表达式定义函数的区别详解

    本篇文章主要介绍了javascript 用函数语句和表达式定义函数的区别。需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • JS解密入门之凭直觉解

    JS解密入门之凭直觉解

    什么叫直觉解?根据目前流行的免杀方法,有这么几种初级加密方法。进制加密,URLEncode加密,加花
    2008-06-06
  • 在页面加载之后执行JavaScript

    在页面加载之后执行JavaScript

    这篇文章主要介绍了在页面加载之后执行JavaScript的详细过程,本文通过实例代码文字解说给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06

最新评论