• 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的三种方式

  • 相关阅读:
    转 UICollectionView 详解
    springboot配置ssl证书
    服务器ganglia安装(带有登录验证)
    eureka配置说明
    Servlet中获取请求参数问题
    apidoc学习(接口文档定义取代word)
    markdown语法
    JVM分析
    ftp上传或下载文件工具类
    ubuntu命令安装
  • 原文地址:https://www.cnblogs.com/snandy/p/2155300.html
Copyright © 2020-2023  润新知