JS操作中DOM与BOM的兼容

        虽说大多数年轻人用的都是Chrome,firefox等高版本浏览器;但不乏少数长辈,机关单位群体由于各种原因用的老版本浏览器、IE浏览器等。

        控制着页面的大多数功能、用户的交互等的JS不像CSS那样,CSS不做兼容的话在低版本浏览器顶多页面丑了点,JS不做兼容的话整个页面的交互功能几乎就不能用了,除非我们开发人员的雇主想放弃这部分客户,否则我们或多或少都会涉及到兼容问题。

        那么下面就来说说常见的DOM与BOM操作的兼容吧!

1.获取元素节点的样式

(1)行内样式的读写:

        内联样式的内置属性读写  : node.style.属性名 

        此方法操作的是行内样式,无法读取到非行内样式的值的弊端

(2) 样式的读写行内与内部样式表都可以读取到,无法读取到外部引入的css文件中的样式)          // currentStyle                支持IE浏览器

    // getComputedStyle(el,伪类)[attr]  支持非IE,第二个形参伪类可以不传,则默认为null/false。表示不查询伪类

function getStyle(node, attr) {

    var value = node.currentStyle ? node.currentStyle[attr] : getComputedStyle(node, false)[attr]

    return value

}

一、BOM兼容

(1)获取当前浏览器窗口大小

        //window.innerWidth/innerHeight                                                  不兼容IE浏览器

        //document.documentElement.clientWidth/clientHeight             兼容IE 和火狐浏览器

function browerSize() {

         let   width =  window.innerWidth || document.documentElement.clientWidth

         let  height =  window.innerHeight || document.documentElement.clientHeight

           let obj = {width,height}

        return obj

}


(2)获取滚动条滚动距离的兼容函数

          //document.body            不兼容IE

        //document.documentElement 兼容IE

function scrollSize() {

      let  left =  document.documentElement.scrollLeft || document.body.scrollLeft

      let top = document.documentElement.scrollTop || document.body.scrollTop

      let obj = { left,top}

        return obj

}

(3)键盘事件,键值的兼容获取 

//形参event为event事件对象,在事件的回调函数中调用此方法时,需要将event对象作物实参传递过来

//ev.which 支持IE低版本,ev.keycode支持高版本浏览器

function getKeyCode(event){

    let ev = event || window.event

    let code = ev.keycode ||ev.which 

    return code

}

二、DOM事件兼容

(1) 取消冒泡兼容 

 //eve.stopPropagation() 兼容非IE

 //eve.cancelBubble      兼容IE

function cancelPropagation(event) {

    let eve = event || window.event;

   eve.stopPropagation ? eve.stopPropagation() :eve.cancelBubble

}

(2) js阻止标签的默认行为    注:一般为点击有默认行为的标签

// eve.preventDefault() 不支持IE

//eve.returnValue = false 支持IE

function stopDefault(event) {

     let eve = event || window.event;

      eve.preventDefault ?  eve.preventDefault() : eve.returnValue = false;

}

(3)添加事件监听的兼容 

    //addEventListener 不兼容IE

    //attachEvent      兼容IE

    // el['on'+event]  低版本特殊浏览器 (IE6以下及其他低版本)

function addEve(el, event, fn) {

    if (el.addEventListener) {

        el.addEventListener(event, fn)

    } else if (el.attachEvent) {

        el.attachEvent('on' + event, fn)

    } else {

        el['on' + event] = fn

    }

}

(4) 移除事件监听的兼容 

     //addEventListener 不兼容IE

    //attachEvent      兼容IE

    // el['on'+event]  低版本特殊浏览器

function delEve(el, event, fn) {

 if (el.removeEventListener) {

        el.removeEventListener(event, fn)

    } else if (el.attachEvent) {

        el.detachEvent('on' + event, fn)

    } else {

        el['on' + event] = null

    }

}

(5)获取事件源对象的兼容写法

    // eve.target    不支持IE

    // eve.srcElement 支持IE

function getTarget(eve) {

return eve.target || eve.srcElement

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、离职多久了 2、大约多久到岗 3、离这里多远 4、会考虑搬家吗 5、公司会加班 6、为什么要离职 7、你们这个...
    临渊鲸落阅读 5,120评论 0 1
  • 初级-DOM详解系列 1-初识DOM DOM: Document Object Model (文档对象模型)简单来...
    2点半阅读 4,282评论 0 2
  • JS中出现的兼容性问题的总结 1.关于获取行外样式 currentStyle 和 getCo...
    三千繁夢阅读 1,738评论 0 1
  • 局部作用域内 不声明可以改变全局的变量; Day01 document.querySelector("mark")...
    Moquyun阅读 4,438评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 12,772评论 28 53

友情链接更多精彩内容