Discuz教程网

IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性

[复制链接]
authicon dly 发表于 2011-9-6 21:04:53 | 显示全部楼层 |阅读模式
如设置class属性
  1. <label>姓名:</label><input type="checkbox" id="name"/>
  2. <script>
  3. var lab = document.getElementsByTagName('label')[0];
  4. lab.setAttribute('for', 'name');
  5. </script>
复制代码

我们知道当lab设置了for属性,点击label将自动将对应的checkbox选中。但以上设置在IE6/7点击将不会选中checkbox。

类似的情况还发生在 cellspacing/cellpadding 上。汇总如下:
class
for
cellspacing
cellpadding
tabindex
readonly
maxlength
rowspan
colspan
usemap
frameborder
contenteditable
因此,当写一个通用的跨浏览器的设置元素属性的接口方法时需要考虑注意以上属性在IE6/7中的特殊性。如下
  1. dom = (function() {
  2. var fixAttr = {
  3. tabindex: 'tabIndex',
  4. readonly: 'readOnly',
  5. 'for': 'htmlFor',
  6. 'class': 'className',
  7. maxlength: 'maxLength',
  8. cellspacing: 'cellSpacing',
  9. cellpadding: 'cellPadding',
  10. rowspan: 'rowSpan',
  11. colspan: 'colSpan',
  12. usemap: 'useMap',
  13. frameborder: 'frameBorder',
  14. contenteditable: 'contentEditable'
  15. },
  16. div = document.createElement( 'div' );
  17. div.setAttribute('class', 't');
  18. var supportSetAttr = div.className === 't';
  19. return {
  20. setAttr : function(el, name, val) {
  21. el.setAttribute(supportSetAttr ? name : (fixAttr[name] || name), val);
  22. },
  23. getAttr : function(el, name) {
  24. return el.getAttribute(supportSetAttr ? name : (fixAttr[name] || name));
  25. }
  26. }
  27. })();
复制代码

首先,标准浏览器直接使用原始属性名;其次,IE6/7非以上列举的属性仍然用原始属性名;最后这些特殊属性(与JS关键字同名如for,class)使用fixAttr。
好了,现在不用考虑className/htmlFor了,都使用class/for即可。
  1. dom.setAttr(el, 'class', 'red');
  2. dom.getAttr(el, 'class');
  3. dom.setAttr(el, 'for', 'userName');
  4. dom.getAttr(el, 'for');
复制代码



上一篇:Javascript继承机制的设计思想分享
下一篇:dojo学习第一天 Tab选项卡 实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-3 09:54

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表