做兼容注意:

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

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

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

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

  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. 【VMware Workstation】虚拟机静态IP NAT连接外部网络(局域网以及广域网)

    使用虚拟机时,为了减少后期的网络维护工作,配置网络IP时使用了NAT连接.静态IP的方式.这里把我的配置步骤顺序罗列出来. 一.配置虚拟网络编辑器 1.在VMware 的编辑菜单选择虚拟网络编辑器 2 ...

  2. 转载_2012年的Android之旅:梦想、学习、坚持、自信、淡定

    原文地址:http://blog.csdn.net/luoshengyang/article/details/8452527 2012年的Android之旅:梦想.学习.坚持.自信.淡定.. ---- ...

  3. expander graph&random walk的一个小应用

    此文主要总结的是一种随机算法,旨在判断一个expander图上两点是否连通.复杂度O(logn).算法思路清奇. expander graph博大精深,如果对expander graph的生成,fam ...

  4. iOS,点击button拨打电话

    //按钮点击拨打电话 -(void)kfclick:(UIButton *)btn { [[UIApplication sharedApplication] openURL:[NSURL URLWit ...

  5. 如何编写更好的SQL查询:终极指南-第二部分

    上一篇文章中,我们学习了 SQL 查询是如何执行的以及在编写 SQL 查询语句时需要注意的地方. 下面,我进一步学习查询方法以及查询优化. 基于集合和程序的方法进行查询 反向模型中隐含的事实是,建立查 ...

  6. solr-geohsah 按照距离搜索分组

    通过solr的domain-import,将mysql的数据通过查询,导入到solr中.java通过使用solrj,链接solr,调用domaininport,并将分页参数设置到domain-impo ...

  7. prop解决一个checkbox选中后再次选中失效的问题

    //问题点 初始状态复选框没有全选, 点击全选按钮调用checkAll方法, 实现了全选, 然后点击全不选按钮, 实现了全不选, 然后再次点击全选按钮, 结果却木有全选, 再反复点击木有任何反应. d ...

  8. pip源相关问题

    指定源地址安装: pip install -i http://pypi.douban.com/simple/ packagename pip install -i http://pypi.tuna.t ...

  9. 详解 anjularjs的ui-route(多视图、视图嵌套、视图传参)

    最近整理了一下anjularjs的第三方插件ui-route,在这就以一个demo的形式讲解一下.整片博客均以开头的demo代码为例.下边是个目录,大家可以酌情直接跳转浏览. 1. demo的代码 2 ...

  10. 数据绑定技术一:GridView控件

    在网站或应用程序中,要显示数据信息,可用到ASP.NET提供的数据源控件和能够显示数据的控件. 一.数据源控件 数据源控件用于连接数据源.从数据源中读取数据以及把数据写入数据源. 1.数据源控件特点 ...