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 相关文章推荐
jsp+javascript打造级连菜单的实例代码
Jun 14 Javascript
javascript文件中引用依赖的js文件的方法
Mar 17 Javascript
鼠标移到图片上变大显示而不是放大镜效果
Jun 15 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
Sep 24 Javascript
详解AngularJS中module模块的导入导出
Dec 10 Javascript
jQuery获取file控件中图片的宽高与大小
Aug 04 Javascript
JS控制HTML元素的显示和隐藏的两种方法
Sep 27 Javascript
jQuery:unbind方法的使用详解
Aug 14 jQuery
jQuery简单实现对数组去重及排序操作实例
Oct 31 jQuery
vue中音频wavesurfer.js的使用方法
Feb 20 Vue.js
Vue 列表页带参数进详情页的操作(router-link)
Nov 13 Javascript
从原生JavaScript到React深入理解
Jul 23 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/26 PHP
jquery实现excel导出的方法
2013/04/04 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
学习vue.js计算属性
2016/12/03 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
2017/03/28 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
详解React Native网络请求fetch简单封装
2017/08/10 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
Python类装饰器实现方法详解
2018/12/21 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
Django框架models使用group by详解
2020/03/11 Python
Python实现Appium端口检测与释放的实现
2020/12/31 Python
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
2014最新党员违纪检讨书
2014/10/12 职场文书
个人债务授权委托书
2014/10/17 职场文书
小学生手册家长意见
2015/06/03 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
使用golang编写一个并发工作队列
2021/05/08 Golang
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记
vue递归实现树形组件
2022/07/15 Vue.js