Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 40826|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-4-7 10:51:33 | 显示全部楼层 |阅读模式

    JS中出现的兼容性问题的总结

    1.关于获取行外样式 currentStyle 和 getComputedStyle 出现的兼容性问题
      我们都知道js通过style不可以获取行外样式,当我们需要获取行外样式时:
      我们一般通过这两个方法获取行外样式:
      IE下: currentStyle
      Chrome,FF下: getComputedStyle(oDiv,false)
            兼容两个浏览器的写法:
            if(oDiv.currentStyle){
                alert(oDiv.currentStyle.width);
            }else{
                alert(getComputedStyle(oDiv,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(oDiv,'width');



    2.关于用“索引”获取字符串每一项出现的兼容性问题:
      对于字符串也有类似于 数组 这样的通过 下标索引 获取每一项的值,
        var str="abcde";
        aletr(str[1]);
        但是低版本的浏览器IE6,7不兼容
        兼容方法:str.charAt(i)    //全部浏览器都兼容
        var str="abcde";
        for(var i=0;i<str.length;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<oUl.childNodes.length;i++){
        if(oUl.childNodes.nodeType==1){
          oUl.childNodes.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

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-6 14:11 , Processed in 0.096029 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表