JS中兼容性问题处理方法

本文主要和大家分享JS中兼容性问题处理方法,希望能帮助到大家。

1.关于获取行外样式 currentStyle 和 getComputedStyle 出现的兼容性问题
  我们都知道js通过style不可以获取行外样式,当我们需要获取行外样式时:
  我们一般通过这两个方法获取行外样式:
  IE下: currentStyle
  Chrome,FF下: getComputedStyle(op,false)
        兼容两个浏览器的写法:
        if(op.currentStyle){
            alert(op.currentStyle.width);
        }else{
            alert(getComputedStyle(op,false).width);
        }
    *注:在解决很多兼容性写法时,都是用if..else..

    封装一个获取行外样式的函数:(兼容所有浏览器,包括低版本IE6,7)
        funtion getStyle(obj,name){
            if(obj.currentStyle){
                //IE
                return obj.currentStyle[name];
            }else{
                //Chrom,FF
                return getComputedStyle(obj,false)[name];
            }
        }
    调用:getStyle(op,’width’);

2.关于用“索引”获取字符串每一项出现的兼容性问题:
  对于字符串也有类似于 数组 这样的通过 下标索引 获取每一项的值,
    var str=”abcde”;
    aletr(str[1]);
    但是低版本的浏览器IE6,7不兼容
    兼容方法:str.charAt(i)    //全部浏览器都兼容
    var str=”abcde”;
    for(var i=0;i
      alert(str.charAt(i));   //放回字符串中的每一项
    }

3.关于DOM中 childNodes 获取子节点出现的兼容性问题
  childNodes:获取子节点,
    –IE6-8:获取的是元素节点,正常
    –高版本浏览器:但是会包含文本节点和元素节点(不正常)
  解决方法: 使用nodeType:节点的类型,并作出判断
      –nodeType=3–>文本节点
      –nodeTyPE=1–>元素节点
  例: 获取ul里所有的子节点,让所有的子节点背景色变成红色
  获取元素子节点兼容的方法:
  var oUl=document.getElementById(‘ul’);
  for(var i=0;i
    if(oUl.childNodes[i].nodeType==1){
      oUl.childNodes[i].style.background=’red’;
    }
  }
  注:上面childNodes为我们带来的困扰完全可以有children属性来代替。
      children属性:只获取元素节点,不获取文本节点,兼容所有的浏览器,
      比上面的好用所以我们一般获取子节点时,最好用children属性。
      var oUl=document.getElementById(‘ul’);
      oUl.children.style.background=”red”;

4.关于使用 firstChild,lastChild 等,获取第一个/最后一个元素节点时产生的问题
  –IE6-8下: firstChild,lastChild,nextSibling,previousSibling,获取第一个元素节点
        (高版本浏览器IE9+,FF,Chrome不兼容,其获取的空白文本节点)
  –高版本浏览器下: firstElementChild,lastElementChild,nextElementSibling,previousElementSibling
      (低版本浏览器IE6-8不兼容)
  –兼容写法: 找到ul的第一个元素节点,并将其背景色变成红色
    var oUl=document.getElementById(‘ul’);
    if(oUl.firstElementChild){
      //高版本浏览器
      oUl.firstElementChild.style.background=’red’;
    }else{
      //IE6-8
      oUl.firstChild.style.background=’red’;
    }

5.关于使用 event对象,出现的兼容性问题
    如: 获取鼠标位置
            IE/Chrom: event.clientX;event.clientY
            FF/IE9以上/Chrom: 传参ev–> ev.clientX;ev.clientY
    获取event对象兼容性写法: var oEvent==ev||event;
        document.oncilck=function(ev){
            var oEvent==ev||event;
            if(oEvent){
                alert(oEvent.clientX);
            }
        }

6.关于为一个元素绑定两个相同事件:attachEvent/attachEventLister 出现的兼容问题
    事件绑定:(不兼容需要两个结合做兼容if..else..)
    IE8以下用: attachEvent(‘事件名’,fn);
    FF,Chrome,IE9-10用: attachEventLister(‘事件名’,fn,false);
    多事件绑定封装成一个兼容函数:
    function myAddEvent(obj,ev,fn){
      if(obj.attachEvent){
        //IE8以下
        obj.attachEvent(‘on’+ev,fn);
      }else{
        //FF,Chrome,IE9-10
        obj.attachEventLister(ev,fn,false);
      }
    }
    myAddEvent(oBtn,’click’,function(){
      alert(a);
    });
    myAddEvent(oBtn,’click’,function(){
      alert(b);
    });

7.关于获取滚动条距离而出现的问题
  当我们获取滚动条滚动距离时:
        IE,Chrome: document.body.scrollTop
        FF: document.documentElement.scrollTop
兼容处理:var scrollTop=document.documentElement.scrollTop||document.body.scrollTop

相关推荐:

一些js中兼容性易错问题的总结

JavaScript中关于兼容性能的具体分析

JavaScript字符串操作方法和浏览器兼容性实例详解

以上就是JS中兼容性问题处理方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2785823.html

(0)
上一篇 2025年3月8日 17:33:04
下一篇 2025年3月8日 17:33:12

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • js普通函数和构造函数详解

    本文主要和大家分享js普通函数和构造函数,希望能帮助大家更好理解什么是js普通函数和构造函数。 1、构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写 2、构造函数和普通函数的区别在于:调用方式不一样 3、普通函数…

    2025年3月8日 编程技术
    200
  • js关于嵌套for循环实例

    javascript嵌套for循环内层如何break或continue外层的for循环呢?很简单,可以给外层for循环加上标签,break或continue的时候加上对应的标签名就可以了: outer: // 给外层的for循环加上标签,取…

    编程技术 2025年3月8日
    200
  • js栈、队列、链表数据结构的实现代码分享

    数据结构有讲过,栈是一种遵从后进先出原则的有序集合,书中对栈的形容非常到位,就像是堆盘子,先放的肯定在下面的位置,最上面的是才放的。给栈内添加元素,最先添加的在栈底,最后一个加进去的称为栈顶元素。 js实现栈及其方法 具体内容有 创建栈:在…

    2025年3月8日 编程技术
    200
  • JS中常用封装方法分享

    1.前言 大家在开发的时候应该知道,有很多常见的实例操作。比如数组去重,关键词高亮,打乱数组等。这些操作,代码一般不会很多,实现的逻辑也不会很难,下面的代码,我解释就不解释太多了,打上注释,相信大家就会懂了。但是,用的地方会比较,如果项目有…

    2025年3月8日
    200
  • js实现深复制代码分享

    关于js实现深复制,首先要明白的就是,要想实现对复杂对象的复制,用到的就是递归的思想。下面就是通过代码一步步来实现并讲解。 function deepClone(data1,data2){        var data2 = data2 …

    编程技术 2025年3月8日
    200
  • D3.js 实现动态进度条实例

    d3 的全称是(data-driven documents),顾名思义可以知道是一个被数据驱动的文档。听名字有点抽象,说简单一点,其实就是一个 javascript 的函数库,使用它主要是用来做数据可视化的。如果你不知道什么是 javasc…

    2025年3月8日 编程技术
    200
  • node.js基础知识学习

    javascript之前一般用于web前段开发,然而由于node.js的出现,用javascript开发后端程序也不再是一件复杂的事情。node.js中js引擎来自于chrome v8浏览器,配合node.js额外开发的工具代码,本身使用起…

    编程技术 2025年3月8日
    200
  • JS实现运动缓冲效果的封装函数分享

    本文主要和大家介绍了js实现运动缓冲效果的封装函数,涉及javascript时间函数与数值运算相关操作技巧,需要的朋友可以参考下,希望能帮助到大家。 之前经常写运动函数,要写好多好多,后来想办法封装起来。(运动缓冲)。 /*  物体多属性同…

    编程技术 2025年3月8日
    200
  • 怎样监听angularJs列表数据是否渲染完毕

    这次给大家带来怎样监听angularjs列表数据是否渲染完毕,监听angularjs列表数据是否渲染完毕注意事项有哪些,下面就是实战案例,一起来看一下。  前端在做数据渲染的时候经常会遇到在数据渲染完毕后执行某些操作,这几天就一直遇到在列表…

    编程技术 2025年3月8日
    200
  • JS实现checkBox的单选效果实例代码

    本文主要和大家分享JS实现checkBoxd的单选效果,简单说就是遍历所有的checkBox复选框,如果有一个已经选中,就将其他的checkBox框置为未选中,以此实现单选的效果,我看到很多博客也写了类似的功能,但大部分都是基于jquery…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论