zoukankan      html  css  js  c++  java
  • 关于Dom部分操作各浏览器兼容(setAttribute 与添加事件)

    之前项目中有个小功能,我实现了一下,但是在实现中遇到一些问题,今天来谈谈。

    老生常谈的浏览器不兼容,以前只关心css层面的,javascript的dom操作什么的倒是很少关心。如下图,这个小东西功能如下:

    1. 选中select下拉菜单,点击添加就可以以标签的形式显示出来,见绿色区域。
    2. 点击绿色标签的关闭按钮可以删除该标签。
    3. 后续准备实现功能:封装成服务器端控件,方便在项目中使用。

    这其中的如下操作涉及到浏览器兼容:

    1. 动态添加的标签的css
    2. 添加标签的关闭点击事件

    常见的动态添加css可以使用object.setAttribute(sAttrName, vValue [, iCaseSensitive])方法。用法见MSDN 。

    这篇文章所诉:在目前为止的版本的IE浏览器当动态添加css的class时需要使用setAttribute("className",'classname'):国内网站上也是普遍的这种调调,但是注意:这篇文章发表于MAY 4, 2005。 当时还没有IE8,IE7。IE7中延续以前的做法,使用setAttribute("className","classname");的方法。

    如 

    1 obj.setAttribute("className","btn_close");

    但是在IE8中不同了,必须使用etAttribute("class","classname"),这也与chrome,firefox等浏览器兼容。

    MSDN原文
     The sAttrName parameter requires the name of the desired content attribute and not the Document Object Model (DOM) attribute. For example, in IE8 mode, this method no longer requires sAttrName to be "className" when setting, getting, or removing a CLASS attribute. Earlier versions of Internet Explorer and Internet Explorer 8 in compatibility mode still requiresAttrName to specify the corresponding DOM property name.

    综上,解决方案如下

    obj.setAttribute("className","classname");与obj.setAttribute("class","classname")成对出现即可,虽然有点丑陋,但是可以解决问题。

    完整解决方案

    var ieVersion = GetIeVersion();
            function GetIeVersion() {
                var reg = new RegExp("MSIE ([^;]*);", "i");
                if (reg.test(navigator.appVersion)) return parseInt(RegExp.$1);
                return 0;
            }
    	if(ieVersion>0&&ieVersion<8)
    		 obj.setAttribute("className","btn_close");
    	else
    		 obj.setAttribute("class","btn_close");
    

     再谈添加事件:

    可以使用如下代码

    1 var ele = document.createElement("a");
    2 ele.alt=VALUE;//要传递的参数 可以自定义一个属性(如if(!ele.attr){ele.attr=VALUE}),我习惯用alt
    3  if(window.addEventListener){ //FF
    4   ele.addEventListener("click",show,false);
    5 }else{ //IE chrome
    6 ele.attachEvent("onclick",show);
    7 }
    8
    9 function show() {
    10 //sreElement(IE)\target(FF) 获取事件源对象
    11 var srcEle=arguments[0].srcElement?arguments[0].srcElement:arguments[0].target;
    12 alert(srcEle.alt); //获取传递的参数值
    13 }

    代码复制自http://danjp.javaeye.com/blog/467007,详细请参看原文

  • 相关阅读:
    Hibernate+JPA (EntityMange讲解)
    JPA和Hibernate的区别
    Hibernate与Jpa的关系,终于弄懂
    JEE学习线路
    J2EE中你必须了解的13种技术规范
    js设置datagriad的行移动
    js正则表达式中的特殊字符
    iOS 开发之动画篇
    Phone APP设计规范/iPad APP设计规范/Android APP设计规范/网页设计规范
    打包程序时的证书问题(上传APP就出现Missing iOS Distribution signing indetity for)
  • 原文地址:https://www.cnblogs.com/x2048/p/1998161.html
Copyright © 2011-2022 走看看