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 相关文章推荐
用Jquery.load载入页面后样式没了页面混乱的解决方法
Oct 20 Javascript
JavaScript对象数组排序函数及六个用法
Dec 23 Javascript
javascript自动恢复文本框点击清除后的默认文本
Jan 12 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
Jan 12 Javascript
JS基于递归实现倒计时效果的方法
Nov 26 Javascript
Vue.js第三天学习笔记(计算属性computed)
Dec 01 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
Dec 14 Javascript
详解jQuery选择器
Dec 21 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
Feb 21 Javascript
Vue声明式渲染详解
May 17 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
Dec 04 Javascript
vue移动端模态框(可传参)的实现
Nov 20 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动态生成函数示例
2014/03/21 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
React中的render何时执行过程
2018/04/13 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python写入数据到MP3文件中的方法
2015/07/10 Python
python构建深度神经网络(续)
2018/03/10 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
2018/04/28 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
中国专业的音频分享平台:喜马拉雅
2019/05/24 全球购物
学期自我鉴定
2013/11/04 职场文书
致标枪运动员广播稿
2014/02/06 职场文书
银行求职信怎么写
2014/05/26 职场文书
2014年廉洁自律承诺书
2014/05/26 职场文书
学校献爱心活动总结
2014/07/08 职场文书
2015年119消防宣传日活动总结
2015/03/24 职场文书
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
Java使用Unsafe类的示例详解
2021/09/25 Java/Android
Go语言编译原理之变量捕获
2022/08/05 Golang