• js下IE和FF的一些兼容写法总结


    一、脚本差异:

    1、事件绑定:addEventListener 与 attachEvent  事件处理函数中this指向不同, IE中指向window
    2、获取事件对象 :事件处理函数     window.event 
    3、获取触发事件的DOM元素: target  srcElement
    4、阻止默认行为: e.preventDefault()   e.returnValue= false
    5、阻止冒泡:e.stopPropagation()  e.cancelBubble = true;
    6、获取样式信息:getComputedStyle(obj,null).width  currentStyle.width
    7、实例化XHR对象  new XMLHttpRequest()  newActiveXObject()
    8、获取dom元素: parentNode parentElement  
     
     
    二、css差异
    1、!important  优先级最高,在IE6以下异常。
    IE6及以下浏览器有个比较显式的支持问题存在,!important并不覆盖掉在同一条样式的后面的规则。
    div{color:#f00!important;color:#000}  //不会覆盖#000  
    改写成下面的这种,会优先应用#000
    div{color:#f00!important;} div{color:#000;}
     
    1、盒模型:
    2、e.offsetX 
    e.pageX  e.x
     
     
     
    window.event对象差异 
    IE:有window.event对象 
    FF:没有window.event对象。可以通过给函数的参数传递event对象。如onmousemove=doMouseMove(event) 

    获取鼠标当前坐标 
    IE:event.x和event.y。 
    FF:event.pageX和event.pageY。 
    通用:两者都有event.clientX和event.clientY属性。 

    鼠标当前坐标(加上滚动条滚过的距离) 
    IE:event.offsetX和event.offsetY。 
    FF:event.layerX和event.layerY。 

    标签的x和y的坐标位置:style.posLeft 和 style.posTop 
    IE:有。 
    FF:没有。 
    通用:object.offsetLeft 和 object.offsetTop。 


    获取窗体的高度和宽度 
    IE:document.body.offsetWidth和document.body.offsetHeight。注意:此时页面一定要有body标签。 
    FF:window.innerWidth和window.innerHegiht,以及document.documentElement.clientWidth和document.documentElement.clientHeight。 
    通用:document.body.clientWidth和document.body.clientHeight。 

    添加事件 
    IE:element.attachEvent(”onclick”, func);。 
    FF:element.addEventListener(”click”, func, true)。 
    通用:element.onclick=func。虽然都可以使用onclick事件,但是onclick和上面两种方法的效果是不一样的,onclick只有执行一个过程,而attachEvent和addEventListener执行的是一个过程列表,也就是多个过程。例如:element.attachEvent(”onclick”, func1);element.attachEvent(”onclick”, func2)这样func1和func2都会被执行。 

    在这里断桥残雪,曾经写过一个通用的添加删除绑定事件的函数,大家可以查看以下文章:《JavaScript跨浏览器的添加删除事件绑定函数》 

    标签的自定义属性 
    IE:如果给标签div1定义了一个属性value,可以div1.value和div1["value"]取得该值。 
    FF:不能用div1.value和div1["value"]取。 
    通用:div1.getAttribute(”value”)。 

    父节点、子节点和删除节点 
    IE:parentElement、parement.children,element.romoveNode(true)。 
    FF:parentNode、parentNode.childNodes,node.parentNode.removeChild(node)。 


    clientX,pageX,offsetX,x,layerX,screenX,offsetLeft 
    screenX:鼠标在显示屏幕上的坐标。 
    clientX:鼠标在页面显示区域的坐标。 
    注:以上两个都是各浏览器通用的。以下为特有方法: 

    pageX:FF特有,鼠标在页面上的位置,从页面左上角开始定位,这个可以很方便在整个页面上进行定位,IE没有直接替换的属性。 
    layerX:FF特有,鼠标相对于“触发事件的元素的层级关系中离该元素最近的,设置了position的父元素”的边界的位置,从border的左上角开始定位,即如果这个父元素存在border,则坐标原点在border的左上角,而不是内容区域的左上角。 
    offsetX:IE特有,鼠标相对于“触发事件的元素”的位置,从内容区域左上角开始定位,不是从border左上角开始!这个属性比较好用,用来判断鼠标点在一个元素中的哪个位置很方便,FF没有直接替换的属性。 
    x:IE特有,跟layerX一个效果,可作为layerX的直接替换属性。 
    注:IE和FF的定位有个1px的差别,实际上,IE的定位从0开始,FF的定位从1开始,FF永远会比IE大1px,需要根据实际情况处理。 

    offsetLeft:这个属性不是事件对象的属性,而是DOM对象所有的,该属性表示的是DOM对象在“该DOM对象的层级关系中离该对象最近的,设置了position的父对象”中的位置,虽然话是这么说的,但是不同的浏览器效果不一样。 

    FF中严格按上述说明执行,但是在IE6/7中,这个属性返回该DOM对象在其直接父对象中的位置,但是IE8改正了这个问题,不过IE8又有了一个新问题,其他的浏览器都是从父对象的内容区域的左上角开始定位,IE8确是从父元素的border的左上角开始定位,由于测试环境为IETester中的IE8,不能排除是IETester的问题。
  • 相关阅读:
    tp5 -- 微信公众号支付
    tp5对接支付宝支付简单集成
    tp5 -- 腾讯云cos简单使用
    PHP 递归无限极下级
    PHP 头部utf-8
    ThinkPHP5.0-多语言切换
    MySQL插入SQL语句后在phpmyadmin中注释显示乱码
    C#中练级orcle数据查询
    sql中递归查询
    sql server数据类型与其他数据库数据类型对应关系
  • 原文地址:https://www.cnblogs.com/chaofei/p/7688897.html
Copyright © 2020-2023  润新知