/*
 跨浏览器添加事件绑定
 obj : 需要绑定js时间的对象
 type:  欲绑定的事件类型,如:click ,mounseover 等事件  不需要添加on
 fn  :  触发的脚本
*/
function addEvent(obj,type,fn){
  if(typeof obj.addEventListener !='undefined'){ //W3C
     obj.addEventListener(type,fn,false) ; //false表示不捕获冒泡
  }else{  //IE   IE提供的添加事件绑定存在问题
     //为了便于删除事件 特将对象绑定的事件都绑定在该对象本身上,删除的时候同样传递一个该对象即可
      if(!obj.events[type]){
      obj.events[type] = [] ; //创建一个存放事件处理函数的数组
    //把第一次的事件处理函数先储存到第一个位置上
  if(obj["on"+type]){
      obj.events[type][0] = fn;
  }
   }else{
      //同一个注册函数进行屏蔽,不添加到计数器中
   if (addEvent.equal(obj.events[type], fn)) return false;
   }
   //从第二次开始我们用事件计数器来存储
  obj.events[type][addEvent.ID++] = fn;
  //执行事件处理函数
  obj['on' + type] = addEvent.exec;
  
  }
}

//为每个事件分配一个计数器
addEvent.ID = 1;

//同一个注册函数进行屏蔽
addEvent.equal = function (es, fn) {
 for (var i in es) {
  if (es[i] == fn) return true;
 }
 return false;
}

//执行事件处理函数
addEvent.exec = function (event) {
 var e = event || addEvent.fixEvent(window.event);
 var es = this.events[e.type];
 for (var i in es) {
  es[i].call(this, e);
 }
};

//把IE常用的Event对象配对到W3C中去
addEvent.fixEvent = function (event) {
 event.preventDefault = addEvent.fixEvent.preventDefault;
 event.stopPropagation = addEvent.fixEvent.stopPropagation;
 event.target = event.srcElement;
 return event;
};

//IE阻止默认行为
addEvent.fixEvent.preventDefault = function () {
 this.returnValue = false;
};

//IE阻止默认行为
addEvent.fixEvent.preventDefault = function () {
 this.returnValue = false;
};

//跨浏览器删除事件
function removeEvent(obj, type, fn) {
 if (typeof obj.removeEventListener != 'undefined') { //W3C
  obj.removeEventListener(type, fn, false);
 } else {
  for (var i in obj.events[type]) {
   if (obj.events[type][i] == fn) {
    delete obj.events[type][i];
   }
  }
 }
}

//跨浏览器获取窗口可视大小
 
function getInner(){
   if(typeof window.innerWidth !='undefined'){
     return {
     width:window.innerWidth ,
  height:window.innerHeight
  }
   }else{
     return {
      width:document.documentElement.clientWidth ,
   height:document.documentElement.clientHeight
  }
   }
}

//跨浏览器获取滚动条到左边的垂直宽度
function getScollLeft(){
        var scrollPos; 
        if (window.pageXOffset) { 
        scrollPos = window.pageXOffset; } 
        else if (document.compatMode && document.compatMode != 'BackCompat') 
        { scrollPos = document.documentElement.scrollLeft; } 
        else if (document.body) { scrollPos = document.body.scrollLeft; }  
        return scrollPos; 
}

//跨浏览器获取滚动条到顶部的垂直高度
function getScrollTop() { 
        var scrollPos; 
        if (window.pageYOffset) { 
        scrollPos = window.pageYOffset; } 
        else if (document.compatMode && document.compatMode != 'BackCompat') 
        { scrollPos = document.documentElement.scrollTop; } 
        else if (document.body) { scrollPos = document.body.scrollTop; }  
        return scrollPos;  
}

//跨浏览器获取Style
function getStyle(element, attr) {
 if (typeof window.getComputedStyle != 'undefined') {//W3C
  return window.getComputedStyle(element, null)[attr];
 } else if (typeof element.currentStyle != 'undeinfed') {//IE
  return element.currentStyle[attr];
 }
}

//判断class是否存在
function hasClass(element, className) {
 return element.className.match(new RegExp('(\\s|^)' +className +'(\\s|$)'));
}

//跨浏览器添加link规则
function insertRule(sheet, selectorText, cssText, position) {
 if (typeof sheet.insertRule != 'undefined') {//W3C
  sheet.insertRule(selectorText + '{' + cssText + '}', position);
 } else if (typeof sheet.addRule != 'undefined') {//IE
  sheet.addRule(selectorText, cssText, position);
 }
}

//跨浏览器移出link规则
function deleteRule(sheet, index) {
 if (typeof sheet.deleteRule != 'undefined') {//W3C
  sheet.deleteRule(index);
 } else if (typeof sheet.removeRule != 'undefined') {//IE
  sheet.removeRule(index);
 }
}

//获取Event对象
function getEvent(event){
  return event || window.event;
}

//阻止默认行为
function preDef(event) {
 var e = getEvent(event);
 if (typeof e.preventDefault != 'undefined') {//W3C
  e.preventDefault();
 } else {//IE
  e.returnValue = false;
 }
}

//删除左后空格
function trim(str) {
 return str.replace(/(^\s*)|(\s*$)/g, '');
}

js 跨浏览操作的更多相关文章

  1. JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  2. 前端Js跨域方法汇总—剪不断,理还乱,是跨域

    1.通过jsonp跨域2.通过修改document.domain来跨子域(iframe)3.隐藏的iframe+window.name跨域4.iframe+跨文档消息传递(XDM)5.跨域资源共享 C ...

  3. 详解JS跨域问题

    什么是跨域? 概念:只要协议.域名.端口有任何一个不同,都被当作是不同的域.             JavaScript   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  4. 【js跨域】js实现跨域访问的几种方式

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  5. 【前端】【转】JS跨域问题总结

    详情见原博客:详解js跨域问题 概念:只要协议.域名.端口有任何一个不同,都被当作是不同的域. 跨域资源共享(CORS) CORS(Cross-Origin Resource Sharing)跨域资源 ...

  6. 利用JS跨域做一个简单的页面访问统计系统

    其实在大部分互联网web产品中,我们通常会用百度统计或者谷歌统计分析系统,通过在程序中引入特定的JS脚本,然后便可以在这些统计系统中看到自己网站页面具体的访问情况.但是有些时候,由于一些特殊情况,我们 ...

  7. 【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  8. JS跨域方法及原理

        JS跨域分析判断 JS跨域:在不同域之间,JS进行数据传输或通信.比如ajax向不同的域请求数据.JS获取iframe中的页面中的值(iframe内外不同域) 只要协议.端口.域名有一个不同则 ...

  9. JS跨域笔记

    什么是跨域,跨域是指不同域之间相互访问,只要协议.域名.端口有任何一个不同,都被当作是不同的域. 对于端口和协议的不同,只能通过后台来解决,前台是无能为力的. 受浏览器同源策略的限制,本域的js不能操 ...

随机推荐

  1. 汇顶指纹传感器GF919深度解析

    前言: 随着指纹识别技术的日益普遍,其在手机上的应用也得到了广泛关注.作为全球第一款Android正面按压指纹识别手机,魅族MX4 Pro所搭载的国产指纹识别系统可谓是赚足了眼球,这就是由汇顶科技提供 ...

  2. 龙杰ACR122S NFC读卡器

    龙杰智能卡有限公司(ACS,龙杰智能卡控股有限公司之全资附属公司,香港联交所上市编号:8210)创立于1995年,是亚太地区第一大.全球三大智能卡读写器供应商之一.ACS被<福布斯亚洲>杂 ...

  3. DC-DC转换器原理与应用

    DC/DC转换器为转变输入电压后,有效输出固定电压的电压转换器.DC/DC转换器分为三类:升压型DC/DC转换器.降压型DC/DC转换器以及升降压型DC/DC转换器.根据需求可采用三类控制.PWM控制 ...

  4. C51 库函数(2)

    3.2 STDIO.H:一般I/O函数 C51编译器包含字符I/O函数,它们通过处理器的串行接口操作,为支持其它I/O机制,只需修改getkey()和putchar()函数,其它所有I/O支持函数依赖 ...

  5. QT 设置SizePolicy的例子(简单明了)

    http://hi.baidu.com/cybertingred/item/e8eadaad0c7f62f615329be7   QPushButton *left = new QPushButton ...

  6. COJN 0486 800401反质数 呵呵呵呵呵

    800401反质数 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 将正整数 x 的约数个数表示为 g(x).例如,g(1)=1 ...

  7. Silverlight 中 读取XML文件

    一:xml文件 二:后台代码 private void ReadXml() { List<TreeViewItem> nodes = new List<TreeViewItem> ...

  8. 关于开发板不能ping通外网IP

    最近在做远程监控的项目,打算用开发板给一个网站发送数据包.不过发现开发板只能ping通同一局域网内的ip,外网的ip不能ping通.纠结了半天发现是网关没有设置的原因.下面来说说如何解决这个问题. 首 ...

  9. UVAlive3713 Astronauts(2-SAT)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18511 [思路] 2-SAT. 设分得A或B类任务为1 C类任务为 ...

  10. centos 64bit 安装与升级 chrome的方法

    vim /etc/yum.repos.d/CentOS-Base.repo 根据你的系统增加一个节点 [google64] name=Google - x86_64 baseurl=http://dl ...