做兼容注意:

一如果两个都是属性,用逻辑||做兼容

二如果有一个是方法 用三目运算符做兼容

三多个属性或方法封装函数做兼容

一:谷歌浏览器和火狐浏览器鼠标滚动条兼容

  1. 1.document.documentElement.scrollTop || document.body.scrollTop
  2. document.documentElement.scrollLeft || document.body.scrollLeft

二:IE低版本和标准浏览器获取className的兼容

function getgetAttribute(obj){

if(obj.getAttribute("class")==null){

return obj.getAttribute("className");

}else{

return obj.getAttribute("class");

}

}

三 过滤空白文本

三种方式忽略空白文本节点
function noSpace(node){
var arr = [];
//遍历所有的子节点
for(var i = 0; i < node.length; i++){
//判断节点类型是文本且文本中包含空白
       if(node[i].nodeType == 3 && /^\s+$/.test(node[i].nodeValue)){
                continue;
          }else{
             arr.push(node[i]); //将非空白节点添加到新的数组中
       }
}
    return arr;
}

  1. 删除空白文本节点
    function removeSpace(node){
    for(var i = 0; i < node.length; i++){
    //判断节点类型是文本且文本中包含空白
           if(node[i].nodeType == 3 && /^\s+$/.test(node[i].nodeValue)){
                  //移除文本节点中的空白
                    node[i].parentNode.removeChild(node[i]);
              }
           }
           return node;
    }

常用 重要//3.移除空白文本节点

function removeSpace(node){ //node :父节点

var childs = node.childNodes; //获取所有子节点

for(var i = 0;i < childs.length;i ++){

if(childs[i].nodeType === 3 && /^\s+$/.test(childs[i].nodeValue)){

node.removeChild(childs[i]);

}

}

return node;

}

四 获取非行内样式兼容

function getStyle(obj,attr){
        if(obj.currentStyle){
             return obj.currentStyle[attr];
        }else{
             return getComputedStyle(obj,false)[attr];
        }
   }

三目也可以

function getStyle(obj,attr){

return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,true)[attr];

}

五 function(){

var e= evt||window.event;

}

六function getButton(evt){

var e = evt || window.event; //获取事件对象

if(evt){ //通过获取事件对象的方式,判断是否为标准浏览器

return e.button; //直接键值

}else if(window.event){ //通过获取事件对象的方式,判断是否为IE

//键值向标准靠拢(返回标准键值)

switch(e.button){

case 1 : return 0;

case 4 : return 1;

case 2 : return 2;

}

}

}

七 document.onkeypress =function(evt){

Var e=evt || window.event;

Var keyValue = e.keyCode || e.charCode || e.which;

Alert(keyValue);

}

八 阻止事件冒泡兼容

e.stopPropagation ?e.stopPropagation():e.cancelBubble=true;

九  阻止a标签默认链接

e.preventDefault ? e.preventDefault() : e.returnValue = false;

十添加事件监听的兼容

function addEventListener(obj,event,fn,boo){

if(obj.addEventListener){

obj.addEventListener(event,fn,boo);

}else{

obj.attachEvent("on" + event,fn);

}

}

十一移出事件监听的兼容

function removeEventListener(obj,evt,fn,boo){

if(obj.removeEventListener){

obj.removeEventListener(evt,fn,boo);

}else{

obj.detachEvent("on" + evt,fn);

}

}

后续还会有 暂时总结一点 当然兼容写法多样 也可以用三种方式里的其他写

JS中基本的一些兼容问题 可能解释的不会太清楚的更多相关文章

  1. [js]js中4种无节操的预解释情况

    js中4种无节操的预解释情况 - 1. if语句即使条件不成立,条件里的表达式也会进行预解释. - 2. 匿名函数的预解释: 只对等号左边与解释 - 3. 自执行函数的预解释: 不进行预就解释, 执行 ...

  2. JS中一些常用的兼容写法

    1.滚动条到顶端的距离var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;2.滚动条到左端的距离 ...

  3. cssText在js中写样式表兼容全部

    oDiv.style.cssText="width:100px;height:200px;";是前面的升级版(oDiv.style.width='200px';) <styl ...

  4. js中getBoundingClientRect的作用及兼容方案

    js中getBoundingClientRect的作用及兼容方案 1.getBoundingClientRect的作用 getBoundingClientRect用于获取某个html元素相对于视窗的位 ...

  5. 分享一个自定义的 console 类,让你不再纠结JS中的调试代码的兼容

    问题的产生 在写JS的过程中,为了调试我们常常会写很多 console.log.console.info.console.group.console.warn.console.error代码来查看JS ...

  6. js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符

    js中对arry数组的各种操作小结   最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...

  7. springMVC框架在js中使用window.location.href请求url时IE不兼容问题解决

    是使用springMVC框架时,有时候需要在js中使用window.location.href来请求url,比如下面的路径: window.location.href = 'forecast/down ...

  8. js中css样式兼容各个浏览器写法

    在实际业务中往往需要在js中对dom添加一些样式,还需要对各个浏览器厂商的兼顾,看到一位大神写的一个方法很赞,做一个笔记 function prefixStyle(style){ var eleSty ...

  9. js中startWith、endWith 函数不能在任何浏览器兼容的问题

    在做js测试的时候用到了startsWith函数,但是他并不是每个浏览器都有的,所以我们一般要重写一下这个函数,具体的用法可以稍微总结一下 在有些浏览器中他是undefined 所以我们可以这样的处理 ...

随机推荐

  1. 【Centos 7】使用screen恢复终端连接

    操作系统:centos7.1 (在ubuntu上测试过,不支持 screen) 主机:虚拟云主机 问题出现:在使用打包式在线安装phpstudy时,由于安装过程非常漫长,http报文过一段时间没有回送 ...

  2. c语言 内存管理

    动态内存是由程序员手动分配,不再使用时,一定记得释放内存. 静态内存是程序开始运行时由编译器分配的内存,它的分配是程序开始编译时完成的,不占用cpu资源.程序中的各种变量在编译源程序时就已经分配了内存 ...

  3. HashMap 数组应用面试题(Point)

    今天看了一题面试题,以为很简单,不过自己写了遍,没有完全写出来: 题目是这样的: 给定一些 points 和一个 origin,从 points 中找到 k 个离 origin 最近的点.按照距离由小 ...

  4. 【MD5解密】免费帮大家解MD5

    除睡觉时间外最慢2小时内回复!结合各种国内外免费收费引擎和高效彩虹表,需要解的在评论下方评论即可

  5. JSP慕课网之application、page、pageContext、config、exception

    接下来使用getSession().forward().include()方法. 跳转的include.jsp页面:

  6. Html5笔记之第五天

    Html5增强的文件上传域 <!DOCTYPE html> <html> <head> <title>Html5增强的文件上传域</title&g ...

  7. Keep in Mind

    Do not undermine your worth by comparing yourself with others.It is because we are different and eac ...

  8. Python使用MySQL数据库(新)

    之前写过一篇 Python使用MySQL数据库的博客,主要使用的是Python2和MySQLdb驱动. python使用mysql数据库 然而,2016年开始,我从Python2切换到了Python3 ...

  9. H2Engine服务器引擎介绍

    H2Engine服务器引擎介绍 简介 H2Engine服务器引擎架构是轻量级的,与其说是引擎,个人觉得称之为平台更为合适.因为它封装的功能非常精简,但是提供了非常简洁方便的扩展机制,使得可以用C++. ...

  10. Eclipse注释模板设置方法

    设置注释模板的入口:Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素 ...