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[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 浏览器兼容问题及解决办法的更多相关文章

  1. div+css常见浏览器兼容问题以及解决办法

    1.图片下方出现几像素的空白间隙问题说明:这个问题在ie6和ff(火狐)下经常见到,例如 <div><img src=""/></div>这个图 ...

  2. 低版本IE内核浏览器兼容placeholder属性解决办法

    最简便的一个方法,通过js实现. <input type="text" name="username" id="username" v ...

  3. Eclipse中js文件修改后浏览器不能及时更新的解决办法

    项目中js文件修改后浏览器不能及时更新的解决办法 转载:http://www.codeweblog.com/%E9%A1%B9%E7%9B%AE%E4%B8%ADjs%E6%96%87%E4%BB%B ...

  4. IE浏览器和Firefox浏览器兼容性问题及解决办法

    IE浏览器和Firefox浏览器兼容性问题及解决办法 为了方便大家阅读代码,以下以 IE 代替 Internet Explorer,以 MF/FF 代替 Mozzila Firefox : 1.//w ...

  5. eclipse中的js文件报错的解决办法

    在使用别人的项目的时候,导入到eclipse中发现js文件报错,解决办法是关闭eclipse的js校验功能. 三个步骤: 1. 右键点击项目->properties->Validation ...

  6. MyEclipse的JQuery.min.js报错红叉解决办法

    MyEclipse的JQuery.min.js报错红叉解决办法 1.选中报错的jquery文件"jquery-1.2.6.min.js".2.右键选择 MyEclipse--> ...

  7. Win7下VS2008安装cocos2d-2.0-x-2.0.4模板时, 运行InstallWizardForVS2008.js文件执行失败的解决办法

         今天在Win7环境下的VS2008中安装cocos2d-x模板的过程中,当点击InstallWizardForVS2008.js时,弹出" 没有文件扩展'.js'的脚本引擎&q ...

  8. JS中常遇到的浏览器兼容问题和解决方法

    今天整理了一下浏览器对JS的兼容问题,希望能给你们带来帮助,我没想到的地方请留言给我,我再加上: 常遇到的关于浏览器的宽高问题: //以下均可console.log()实验 var winW=docu ...

  9. JS中常遇到的浏览器兼容问题和解决方法【转】

    今天整理了一下浏览器对JS的兼容问题,希望能给你们带来帮助,我没想到的地方请留言给我,我再加上: 常遇到的关于浏览器的宽高问题: //以下均可console.log()实验 var winW=docu ...

随机推荐

  1. Django之models字段属性

    目录 常用字段 AutoField IntegerField CharField 自定义及使用char DateField DateTimeField 字段合集 字段参数 null unique db ...

  2. Arrays.asList() 导致的java.lang.UnsupportedOperationException异常

    Arrays.asList() 只支持遍历和取值 不支持增删改 继承至AbstractList内部类

  3. 【python小随笔】将一个列表的值,分成10个一组,遍历的时候每10个遍历一次

    t = ['B071LF9R6G', 'B0714BP3H4', 'B0756FL8R7', 'B072HX95ZR', 'B07CX389LX', 'B07D9MZ7BD', 'B07D9L15L5 ...

  4. 【转】13个JavaScript图表(JS图表)图形绘制插件

    现在网络上又有越来越多的免费的(JS 图表)JavaScript图表图形绘制插件.我之前给一家网站做过复杂的图形,我们用的是 highchart.在那段时间,没有很多可供选择的插件.但现在不同了,很容 ...

  5. js如何下载后台传过来的base64文件

    一.<a>标签的作用 相信大部分人都知道<a>链接再简单不过了,跳转嘛,跳转到另外一个页面,这谁不知道. 当然这这是一部分, <a> 标签定义超链接,用于从一个页面 ...

  6. Java配置文件读取中文乱码问题

    背景 这是我之前在做的用友服务对接开发,昨天领导拿给财务测试时告诉我有乱码,当时我第一想法是用友那边的编码格式有问题,因为还在做其他任务,我说等问一下用友他们用的什么编码格式我们这边改一下,然后今天早 ...

  7. django 调试工具 django-tool-bar

    这里介绍一个好用的Django调试工具-django-tool-bar,主要用来调试性能,检测sql耗时,页面渲染耗时,是优化必备良器. 安装 下载 pip install django-debug- ...

  8. Mysql.linux登录数据库

    //mysql -hlocalhost -uroot -p //-h数据库地址 -u用户名 -p密码 -P端口号(P大写)//-p可省略,会提示输入密码. mysql -h127. -uroot -p ...

  9. Django redis 应用

    一.自定义连接池 与python中使用连接池一样(使用单例对象) 注意:每个视图函数都要有 conn = redis.Redis(connection_pool=POOL) 二.使用第三方模块(dja ...

  10. Mysql 8+ 版本完全踩坑记录

    问题是这样 刚霍霍了一台腾讯云服务器需要安装mysql 然后就选择了8+这个版本. 安装步骤网上有的是. 我只写最主要的部分 绝对不出错 外网可访问 .net java都可以调用 其实不指望有人看 就 ...