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


Posted in Javascript onAugust 28, 2011

如设置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');
Javascript 相关文章推荐
autoIMG 基于jquery的图片自适应插件代码
Mar 12 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
Jul 13 Javascript
javascript操作字符串的原生方法
Dec 22 Javascript
node.js操作mongodb学习小结
Apr 25 Javascript
JS版元素周期表实现方法
Aug 05 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
Mar 21 Javascript
jQuery中事件与动画的总结分享
May 24 Javascript
jQuery之简单的表单验证实例
Jul 07 Javascript
JQuery PHP图片在线裁剪实例
Jul 27 Javascript
Node.js 8 中的重要新特性
Jun 28 Javascript
javascript设计模式之装饰者模式
Jan 30 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
Oct 22 Javascript
IE6、IE7中获取Button元素的值的bug说明
Aug 28 #Javascript
JavaScript 选中文字并响应获取的实现代码
Aug 28 #Javascript
js预载入和JavaScript Image()对象使用介绍
Aug 28 #Javascript
jquery 查找iframe父级页面元素的实现代码
Aug 28 #Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
Aug 28 #Javascript
一个JQuery写的点击上下滚动的小例子
Aug 27 #Javascript
JavaScript 原型继承之构造函数继承
Aug 26 #Javascript
You might like
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
PHP中的静态变量及static静态变量使用详解
2015/11/05 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
简单的JavaScript互斥锁分享
2014/02/02 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
详解JavaScript函数
2015/12/01 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
Python实现获取网站PR及百度权重
2015/01/21 Python
python中子类继承父类的__init__方法实例
2016/12/15 Python
Python实现的异步代理爬虫及代理池
2017/03/17 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
Python同时处理多个异常的方法
2020/07/28 Python
python时间time模块处理大全
2020/10/25 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
特步官方商城:Xtep
2017/03/21 全球购物
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
幼儿园教师的考核评语
2014/04/18 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
小学教师师德承诺书
2014/05/23 职场文书
初一语文教学反思
2016/03/03 职场文书
六年级作文之家庭作文
2019/12/12 职场文书