博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中浏览器兼容代码
阅读量:6804 次
发布时间:2019-06-26

本文共 2789 字,大约阅读时间需要 9 分钟。

  浏览器界中,有五大巨头,分别是谷歌,火狐,苹果,Opera和IE,其中火狐有自己的部分属性,IE不同的版本也有各自的一些属性,要想在这些浏览器中正确是显示网页,就要为这些属性写上它们的兼容代码,一般只要适配了谷歌,火狐和IE这三种浏览器,其他浏览器基本都支持。

  技巧:不管是哪一款浏览器,如果浏览器不支持该属性的话,其类型都是“undefined”,根据这个类型既可写出其兼容代码,以下内容是需要对浏览器进行兼容的地方。

  1. 设置标签的文本内容,即闭合标签中间的内容,如p标签,div标签,span标签...
     textContext属性:谷歌,火狐支持,IE8不支持
     innerText属性:谷歌,火狐,IE8都支持
     innerHTML属性:浏览器都支持,推荐使用

其兼容代码

function setInnerText(element,text) {    //判断浏览器是否支持这个属性    if(typeof element.textContent =="undefined"){//如果浏览器不支持该属性     element.innerText=text;    }else{//支持这个属性      element.textContent=text;    }  }  //获取任意标签中间的文本内容  function getInnerText(element) {    if(typeof element.textContent=="undefined"){     return element.innerText;    }else{      return element.textContent;    }  }复制代码
  1. 获取节点或元素的兼容代码:
    在谷歌和火狐浏览器中,都支持获取节点和元素的方法,但是在IE8浏览器中,对于获取具体的节点或或元素,则IE8会不支持和得到的结果不同。在IE8中,对于获取具体节点的方法,返回的是元素,而获取具体元素的方法,则不支持。

获取相关节点和元素的方法,一共有12种

获取父亲节点:对象.parentNode 获取父亲元素:对象.parentElement 获取子节点:对象.childNodes (返回伪数组) 获取子元素:对象.children (返回伪数组) 获取第一个节点:对象.firstChild 获取第一个子元素:对象.firstElementChild 获取最后一个子节点:.lastChild 获取最后一个子元素:对象.lastElementChild 获取前一个兄弟节点:对象.previousSibling 获取前一个兄弟元素:对象.previousElementSibling 获取后一个兄弟节点:对象.nextSibling 获取后一个兄弟元素:对象.nextElementSibling

总结:在谷歌和火狐浏览器中,1~12种方法都支持,获取节点的方法获取到的是节点,获取元素的方法获取到的是元素; 在IE8浏览器中,从5开始,获取节点的方法获取到的是元素,获取元素的方法获取到的是undefind,不支持获取元素的方法

说到底,我们获取节点的目的主要还是获取元素节点,因此,其兼容性代码

获取任意一个父级元素的第一个子级元素

//因为firstChild毕竟是获取节点的方法,所以加上循环确保此节点是元素节点,严谨写法function getFirstChildElement(fElement){	if(fElement.firstElementChild){	    return fElement.firstElementChild;	}else{	    var node = fElement.firstChild;	    while(node && node.nodeType != 1){		node = node.nextSibling;	    }	return node;	}}复制代码

获取任意一个父级元素的最后一个子级元素

function getLastElementChild(element) {    if(element.lastElementChild){//true--->支持      return element.lastElementChild;    }else{      var node=element.lastChild;//第一个节点      while (node&&node.nodeType!=1){        node=node.previousSibling;      }      return node;    }  }复制代码

获取任意元素的点一个元素

获取任意元素的后一个元素
其代码可参考以上

  1. 为任意元素.绑定任意的事件, 任意的元素,事件的类型,事件处理函数
    谷歌和火狐浏览器支持addEventListener(type,fn,false),不支持attachEvent("on"+type,fn),而IE相反。
function addEventListener(element,type,fn) {    //判断浏览器是否支持这个方法    if(element.addEventListener){      element.addEventListener(type,fn,false);    }else if(element.attachEvent){      element.attachEvent("on"+type,fn);    }else{      element["on"+type]=fn;    }  }复制代码

注意:对象.addEventListener(type,fn,false)和对象.attachEvent("on"+type,fn)这两个方法可对同个点击事件进行绑定,而不会覆盖掉前面的监听方法,假如对按钮的点击事件进行了3次监听,调用这种方法的话,3次监听都能够执行,而不会覆盖掉。 对象.addEventListener(type,fn,useCapture):这是谷歌和火狐的兼容多监听方法

type:String 事件类型,前面不能加“on”,如点击事件:“click”
fn:Function 匿名函数或命名函数
useCapture: 一般为false
对象.attachEvent(type,fn):这是谷歌的兼容多监听方法
type:String 事件类型,前面要加“on”,如点击事件:“onclick”

转载于:https://juejin.im/post/5bab3203e51d450e425ede0d

你可能感兴趣的文章
关于热部署-理解与总结
查看>>
Asp.net 根据IP地址获取跨网段mac地址函数【搜藏】
查看>>
h5 slider页面滑动相关问题
查看>>
PYTHON2.day08
查看>>
paste
查看>>
数据增强之图像旋转及坐标对应(附代码)
查看>>
C# 获取屏幕的大小
查看>>
sass语法(1)
查看>>
react use simditor
查看>>
ARM——I2C
查看>>
垂直水平居中
查看>>
集合(二)栈和链表
查看>>
2-01模块分组,和主题
查看>>
转:深入了解bash与sh的区别
查看>>
WORD神操作!第一个技巧你就傻眼了!
查看>>
Linux shell编程学习笔记-----第六章变量和引用
查看>>
HTML标签小结
查看>>
滴滴算法大赛算法解决过程 - 方案设计
查看>>
写给要买Surface的各位兄弟
查看>>
汤姆大叔设计模式学习体会:设计模式的思想
查看>>