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 相关文章推荐
Javascript中Event属性搜集整理
Sep 17 Javascript
JS快速实现移动端拼图游戏
Sep 05 Javascript
JS 调用微信扫一扫功能
Dec 22 Javascript
vue-router 中router-view不能渲染的解决方法
May 23 Javascript
使用yeoman构建angular应用的方法
Aug 14 Javascript
JS实现运动缓冲效果的封装函数示例
Feb 18 Javascript
checkbox在vue中的用法小结
Nov 13 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
Apr 15 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
Jun 10 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
Feb 04 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 Javascript
解决antd的Form组件setFieldsValue的警告问题
Oct 29 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 GUID生成函数和类
2014/03/10 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
基于jquery的拖动布局插件
2011/11/25 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
nodejs入门教程六:express模块用法示例
2017/04/24 NodeJs
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
简单介绍Python中的len()函数的使用
2015/04/07 Python
Python下rrdtool模块的基本使用方法
2015/11/13 Python
Flask框架配置与调试操作示例
2018/07/23 Python
Python中字符串与编码示例代码
2019/05/20 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
python Matplotlib模块的使用
2020/09/16 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
爱岗敬业演讲稿
2014/05/05 职场文书
食品安全工作方案
2014/05/07 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
就业意向协议书
2015/01/29 职场文书
二审答辩状格式
2015/05/22 职场文书
运动会加油稿
2015/07/22 职场文书
公司老总年会致辞
2015/07/30 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL