zoukankan      html  css  js  c++  java
  • JavaScript 的setAttribute兼容性解决

    setAttribute各个浏览器都支持,但在IE7以下版本中,有些属性值还是有差异的,比如

    obj.setAttribute("class","classname")

    在ie8等主流浏览器能起效,但在IE7以下版本中不起作用,因为IE7以下版本不认得“class”,他们只认得“className”;

    单一的兼容性可以这样写

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            .test{
                 100px;
                height: 100px;
                background: blue;
            }
            .turn{
                background: red;
                 200px;
                height: 300px;
            }
        </style>
        <script>
            window.onload = function() {
                document.getElementsByTagName('button')[0].onclick = function() {
                    var div = document.getElementsByTagName('div')[0]
                    if(div.getAttribute("class")){//判断是否存在
                        div.setAttribute("class","turn");/*IE8,chrome*/
                    }else{
                        div.setAttribute("className","turn")/*IE7-5*/
                    }
                }
            }
        </script>
    </head>
    <body>
        <button>点击切换class</button>
        <div class="test"></div>
    </body>
    </html>

    以上代码可以让setAttribute的class兼容所有主流浏览器

    但除了class有差异外,还有下列属性也有差异

    • class
    • for
    • cellspacing
    • cellpadding
    • tabindex
    • readonly
    • maxlength
    • rowspan
    • colspan
    • usemap
    • frameborder
    • contenteditable
    • style

     为了解决上述问题就要写一个通用的跨浏览器的设置元素属性的接口方法:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=" utf-8"> 
    <style type="text/css"> 
    .textcolor{ 
     font-size:18px; 
     color:red; 
    } 
    </style> 
    <script type="text/javascript"> 
    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)); 
     } 
    } 
    })(); 
    window.onload=function(){ 
     var mydiv=document.getElementById("mydiv"); 
     dom.setAttr(mydiv, 'class', 'textcolor'); 
    } 
    </script> 
    </head> 
    <body> 
    </body> 
    </html>

    另外,同样可以使用element.style的方式去更改

    例如

    document.getElementById("testbt").className = "bordercss";
    document.getElementById("testbt").style.cssText = "color: #00f;";

    参考自:http://www.jb51.net/article/69685.htm

  • 相关阅读:
    Extjs 集合了1713个icon图标的CSS文件
    Sencha Touch 2 DataView / List 分页
    Sencha Touch 笔记
    [奉献]通过命令快速启动应用程序的小软件(QuickLauncher V1.1)
    PTC FlexPLM rfa 接口自动创建产品规格
    Excel Vba 调用WebService的两种方式,解决MSSOAP30 64位不兼容问题
    Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块
    C#获取远程图片,需要Form用户名和密码的Authorization认证
    [转]plsql不安装oracle客户端 进行远程连接
    WPF、Silverlight程序编码资料收集
  • 原文地址:https://www.cnblogs.com/lijinwen/p/5666726.html
Copyright © 2011-2022 走看看