• IE6/7中setAttribute不支持class/for/rowspan/colspan等属性


     

    如设置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 上。汇总如下:

    1. class
    2. for
    3. cellspacing
    4. cellpadding
    5. tabindex
    6. readonly
    7. maxlength
    8. rowspan
    9. colspan
    10. usemap
    11. frameborder
    12. 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');

    相关:

    IE6/7中使用setAttribute设置table的cellpadding和cellspacing的Bug

    设置元素class的三种方式

  • 相关阅读:
    OpenStack(M版)之基础环境配置(2 更换源、安装OpenStack客户端)
    OpenStack(M版)之基础环境配置(1静态ip、网络接口)
    Java关于print、println、printf的区别
    输出1-n的全排列dfs
    统计难题
    单词数
    减肥计划
    Zero Array---思维题
    快速幂+快速乘
    线段树求逆序对
  • 原文地址:https://www.cnblogs.com/snandy/p/2155300.html
Copyright © 2020-2023  润新知