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 radio 操作代码
Mar 16 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
Aug 09 Javascript
纯javascript模仿微信打飞机小游戏
Aug 20 Javascript
Prototype框架详解
Nov 25 Javascript
javascript实现简易计算器
Feb 01 Javascript
Bootstrap table右键功能实现方法
Feb 20 Javascript
微信小程序 template模板详解及实例代码
Mar 09 Javascript
addeventlistener监听scroll跟touch(实例讲解)
Aug 04 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
Mar 23 jQuery
JavaScript实现连连看连线算法
Jan 05 Javascript
在VUE style中使用data中的变量的方法
Jun 19 Javascript
原生JS实现分页
Apr 19 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
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
CI框架中$this-&gt;load-&gt;library()用法分析
2016/05/18 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
Yii2中datetime类的使用
2016/12/17 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
微信小程序引用公共js里的方法的实例详解
2017/08/17 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
python fabric使用笔记
2015/05/09 Python
使用pdb模块调试Python程序实例
2015/06/02 Python
python利用datetime模块计算时间差
2015/08/04 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
利用python汇总统计多张Excel
2020/09/22 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
CSS3悬停效果案例应用
2012/11/21 HTML / CSS
商务日语专业的自荐信
2014/05/23 职场文书
大班亲子运动会方案
2014/06/10 职场文书
教师节标语大全
2014/10/07 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
企业财务管理制度范本
2015/08/04 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript