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 汉字字节判断
Aug 01 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
Nov 30 Javascript
javascript 中that的含义示例介绍
May 14 Javascript
jQuery实现仿Google首页拖动效果的方法
May 04 Javascript
jQuery实用技巧必备(上)
Nov 02 Javascript
javascript检测移动设备横竖屏
May 21 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
Oct 09 Javascript
微信小程序之picker日期和时间选择器
Feb 09 Javascript
vue-cli配置文件——config篇
Jan 04 Javascript
使用异步组件优化Vue应用程序的性能
Apr 28 Javascript
vue中提示$index is not defined错误的解决方式
Sep 02 Javascript
深入理解Vue的数据响应式
May 15 Vue.js
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
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
15种PHP Encoder的比较
2007/03/06 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
angularjs下拉框空白的解决办法
2017/06/20 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
[01:00:10]完美世界DOTA2联赛PWL S2 FTD vs Inki 第二场 11.21
2020/11/24 DOTA
Python实现Linux下守护进程的编写方法
2014/08/22 Python
python入门教程之识别验证码
2017/03/04 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
python实现梯度下降算法
2020/03/24 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
机械工程学院大学生求职信
2014/05/25 职场文书
国家奖学金获奖感言
2014/08/16 职场文书
见习报告怎么写
2014/10/31 职场文书
世界名著读书笔记
2015/06/25 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python
linux下安装redis图文详细步骤
2021/12/04 Redis
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python