zoukankan      html  css  js  c++  java
  • IE6/7中setAttribute不支持class/for/rowspan/colspan等属性

    如设置class属性

    1
    el.setAttribute('class', 'abc');

    在IE6/7中样式“abc”将没有起作用,虽然使用el.getAttribute('class')能取到值“abc”。

    又如for属性

    1
    2
    3
    4
    5
    <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中的特殊性。如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    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即可。

    1
    2
    3
    4
    dom.setAttr(el, 'class', 'red');
    dom.getAttr(el, 'class');
    dom.setAttr(el, 'for', 'userName');
    dom.getAttr(el, 'for');
  • 相关阅读:
    WordPress手机端插件——WPtouch
    WordPress404页面自定义
    WordPress浏览数插件的安装使用
    WordPress的SEO插件——WordPress SEO by yoast安装及使用
    WordPress友情链接插件的安装
    各大搜索引擎提交入口
    thinkphp博客项目纪录
    新概念英语第一册——视频
    ThinkPHP自定义错误页面、成功页面及异常页面
    豪情后台模板,图标大全
  • 原文地址:https://www.cnblogs.com/rainbow661314/p/3291934.html
Copyright © 2011-2022 走看看