使用js是一件令人很抓狂的事情,很多的浏览器兼容,一大推的代码,谁的脑袋能记住那么多的东西,只有平时多积累,所谓熟能生巧嘛。。这里列出一些常用的兼容代码,一点点积累哈~~~
   
一、以跨浏览器的方式处理事件。这个叫EventUtil对象定义了一些方法,用来处理各浏览器之间的差异。
    
     var EventUtil={
        
         addHandler:function(element,type,handler){//绑定事件
             if(element.addEventListener){
                 element.addEventListener(type,handler,false);
             }else if(element.attachEvent){
                 element.attachEvent("on"+type,handler);
             }else{
                 element["on"+type]=null;
             }
         },
    
         removeHandler:function(element,type,handler){//取消事件
             if(element.removeEventListener){
                 element.removeEventListener(type,handler,false);
             }else if(element.detachEvent){
                 element.detachEvent("on"+type,handler);
             }else{
                 element["on"+type]=null;
             }
         },
        
         getEvent:function(event){//获取event对象
             return event:event?window.event;
         },
 
         getTarget:function(event){//获取事件目标
             return event.target||event.srcElement;
         },
 
         preventDefault:function(event){//阻止默认事件
             if(event.preventDefault){
                  event.preventDefault();
             }else{
                  event.returnValue=flase;
             }
         },
 
         stopPropagation:function(event){//阻止冒泡事件
             if(event.stopPropagation){
                  event.stopPropagation();
             }else{
                  event.cancelBubble=true;
             }
         },
 
         getRelatedTarget:function(event){//mouseover,mouseout通过event提供相关元素信息
             if(event.relatedTarget){
                 return event.relatedTarget;
             }else if(event.toElement){
                 return event.toElement;
             }else if(event.fromElement){
                 return event.fromElement;
             }else{
                 return null;
             }
         },
 
         getButton:function(event){//获取鼠标按下键位
             if(document.implementation.hasFeature("MouseEvents","2.0")){
                 return event.button;
             }else{
                 switch(event.button){
                     case 0:
                     case 1:
                     case 3:
                     case 5:
                     case 7:
                           return 0;
                     case 2:
                     case 6:
                           return 2;
                     case 4:
                           return 1;
                 }
             }
         },
 
         getCharCode:function(event){//键盘按下键的ascii值码
             if(typeof event.charCode=="number"){
                  return event.charCode;
             }else{
                  return event.keyCode;
             }
         },
 
         //clipboardData 剪贴板对象,firefox不支持该对象
         getClipboardData:function(event){//获取剪贴板数据
              var clipboardData=(event.clipboardData||window.clipboardData);
              return clipboardData.getData("text");
         },
        
         setClipboardData:function(event,value){
              if(event.clipboardData){
                  return event.clipboardData.setData("text/plain",value);
              }else if(window.clipboardData){
                  return window.clipboardData.setData("text",value);
              }
         },
     }
 
 
二、对表单的操作兼容的一些函数:
1、取得用户在文本框取得的文本:
      function getSelectedText(textbox){
           if(document.selection){//ie
                return document.selection.creatRange().text;
           }else{
                return textbox.value.substring(textbox.selectionStart,textbox.selectionEnd);
           }
      }
 
2、选择部分文本:
      function selectText(textbox,startIndex,stopIndex){
           if(textbox.setSelectionRange){
                 textbox.setSelectionRange(startIndex,stopIndex);
           }else if(textbox.createTextRange){//ie
                 var range=textbox.createTextRange();
                 range.collapse(true);
                 range.moveStart('character',startIndex);
                 range.moveEnd('character',stopIndex-startIndex);
                 range.select();
           }
           textbox.focus();
      }
 
三、一些常用的js自定义函数。
1、下面这个函数可以辅助向现有的URL的末尾添加查询字符串参数,查询字符串中的每个名称和值都应该用encodeURIComponent()进行编码,不然容易发生请求错误:
      function addURLParam(url,name,value){
           url+=(url.indexof('?')==-1?"?":"&");
           url+=encodeURIComponent(name)+"="+encodeURIComponent(value);
           return url;
      }
 
2、设置和获取cookie:
      var CookieUtil={
          get:function(name){
              var cookieName=encodeURIComponent(name)+"=",
                  cookieStart=document.cookie.indexof(cookieNmae);
                  cookieValue=null;
              if(cookieStart>-1){
                  var cookieEnd=document.cookie.indexof(";",cookieStart);
                  if(cookieEnd==-1){
                      cookieEnd=document.cookie.length;
                  }
                 cookieValue=decodeURIComponent(document.cookie.substring(cookieStart+cookieName.length,cookieEnd));
              }
              return cookieValue;
          },
         
          set:function(name,value,expires,path,domain,secure){
              var cookieText=encodeURIComponent(name)+"="+encodeURIComponent(value);
              if(expires instanceof Date){
                   cookieText+=";expires="+expires.toGMTString();
              }
              if(path){
                   cookieText+=";path="+path;
              }
              if(domain){
                   cookieText+=";domain="+domain;
              }
              if(secure){
                   cookieText+=";secure="+secure;
              }
              return cookieText;
          }
          unset:function(name,path,domain,secure){
              this.set(name,"",new Date(0),path,domain,secure);
          }
      }
 

js 浏览器兼容的一些方法的更多相关文章

  1. JS浏览器兼容问题

    一.JS与DOM的兼容性: (一) DOM节点的访问: 1.以前对DOM节点访问一般用“document.All.元素ID属性值”或者“document.元素ID属性值”这种简化的方法,在FireFo ...

  2. js 浏览器兼容css中webkit、Moz、O、ms...写法封装(es6语法)

    /** *浏览器兼容写法封装 */ let elementStyle = document.createElement('div').style let vendor = (() => { le ...

  3. js浏览器兼容

    //window.event   IE:有window.event对象   FF:没有window.event对象.可以通过给函数的参数传递event对象.如onmousemove=doMouseMo ...

  4. js 浏览器兼容问题及解决办法

    JS中出现的兼容性问题的总结 1.关于获取行外样式 currentStyle 和 getComputedStyle 出现的兼容性问题  我们都知道js通过style不可以获取行外样式,当我们需要获取行 ...

  5. IE9 以下版本浏览器兼容HTML5的方法,使用百度静态资源的html5shiv包

    <!--[if lt IE9]> <script src="http://apps.bdimg.com/libs/html5shiv/3.7/html5shiv.min.j ...

  6. scss、less 对浏览器兼容的处理方法, css 的单行溢出、多行溢出

    1. scss @mixin rounded($param1,$param2) {    #{$param1}:$param2;    -webkit-#{$param1}: $param2;     ...

  7. 浅谈CSS hack(浏览器兼容)

    今天简单写一点关于浏览器兼容的处理方法,虽然百度上已经有很多,但是我还是要写! 先看一个图 这个图描述了2016年1月至8月网民们所使用的浏览器市场份额(来源:http://tongji.baidu. ...

  8. 关于浏览器兼容问题及hack写法

    浏览器的兼容问题 1.浏览器内核: Mozilla Firefox ( Gecko ) Internet Explorer ( Trident ) Opera ( Presto ) Safari ( ...

  9. JS中常遇到的浏览器兼容问题和解决方法

    今天整理了一下浏览器对JS的兼容问题,希望能给你们带来帮助,我没想到的地方请留言给我,我再加上: 常遇到的关于浏览器的宽高问题: //以下均可console.log()实验 var winW=docu ...

随机推荐

  1. Onedrive 明年初基础容量缩小到5G,执行这一步骤避免(保持30G)

    Onedrive作为微软的云盘,相当实用,存储一些照片文档. 之前微软一直执行免费用户可以永久拥有30G空间(基础+开启功能获得). 但微软打算从明年开始减低这一优惠至5G. 不过最近微软有一些放松, ...

  2. C# Tostring格式

    开发中经常用到格式化,不管是时间.货币.数字都可以随心所欲.也许你用的是{0:C}方式,也许你用String.Format方式,也许你用.ToString("n"),都是格式化的方 ...

  3. 实用工具【SqlPrompt】 【Subline】 【XMind】 【PhotoShop】 【TakeColor】 【Q+】本次只讨论SqlPrompt

    SqlPrompt[Sqlserver智能提示插件] 1.SqlPrompt可实现sql智能提示,并且会自动关键字大写,如select * from 表名[表名包含的字符],如果实在不知道表名可以按c ...

  4. Integrating AngularJS with RequireJS

    Integrating AngularJS with RequireJS When I first started developing with AngularJS keeping my contr ...

  5. MFC程序执行顺序 .

    1.创建Application object对象theApp 程序一开始生产一个(且只有一个)Application object对象theApp,也即一个CWinApp对象,这个全局对象一产生,便执 ...

  6. oracle length and lengthb

    LENGTH──返回以字符为单位的字符串长度. LENGTHB──返回以字节为单位的字符串长度,它和类型定义中的长度是一个概念,比如你定义的varchar2(10)中的10.在不同的数据库,因为字符集 ...

  7. jquery中的DOM事件绑定与解绑

    在jquery事件中有时候有的事件只需要在绑定后有效触发一次,当通过e.target判断触发条件有效触发后解除绑定事件,来避免多次无效触发和与未知情况造成冲突. 这时候就要用到了jquery中的事件绑 ...

  8. (利用tempdata判断action是直接被访问还是重定向访问)防止微信活动中用户绕过关注公众号的环节

    说明:这个不是在进行微信公众号开发,也就是说在不能获取用户openid的前提下做的下面操作 1.动机:最近有个微信活动(关注了服务号的可以免费领取礼品),要做这么一个功能,活动的入口在微信服务号的菜单 ...

  9. MongoDB初学笔记

    http://www.cnblogs.com/huangxincheng/archive/2012/02/18/2356595.html

  10. devenv命令详解

    devenv  [解决方案文件 | 项目文件 | 任意文件.扩展名]  [开关] devenv 的第一个参数通常是一个解决方案文件或项目文件. 如果您希望在编辑器中自动打开文件, 也可以使用任何其他文 ...