浅谈初学javascript可能遇到的兼容性问题

胡琦博客 2016-04-15 12:50:05
随着语言的不断完善以及浏览器的日益更新,有些代码在某些浏览器的某些版本中表现出不兼容,影响页面的体验;这时就需要处理了这些兼容问题,让页面在多个版本的浏览器上运行良好。
一、表单事件中的oninput。
oninput:当元素获得用户输入时运行脚本,顾名思义,在value改变时触发,实时的,即每增加或删除一个字符就会触发。很遗憾,这个事件在IE6/7/8中表现不兼容;而在IE中,支持的是onpropertychange。这时兼容性t通过匿名函数来写,写法如下:
 元素.oninput=元素.onpropertychange = fn;

二.document.getElementsByClassName()
在js中获取元素如果想从类名获取时,IE6/7/8又不配合了,他们不认识getElementsByClassName,这时又要处理兼容,这里有初级方法通过数组结合循环判断来实现:
  
function fn(str){
//1.区分浏览器。如果是支持document.getElementsByClassName()我就用,这个方法。
if(document.getElementsByClassName){
//var arrStr = document.getElementsByClassName(str);
//return arrStr;
return document.getElementsByClassName(str);
}
//2.如果不支持。
//(1).获取页面上所有的标签(元素节点),然后判断。
var arrAllElements = document.getElementsByTagName("*");
//(2).定义一个新数组
var arr = [];
//(3).循环判断className这个属性,如果==我们传过来的参数,那么放进数组。
for(var i=0;i<arrAllElements.length;i++){
//需求:判断一个字符串中是否包含另外一个字符串
//步骤:
//1.把字符串变成数组。
var arrClassName = arrAllElements[i].className.split(" ");
//2.比较数组中的每一个元素,如果有一个和str相等,那么把所在的元素放进数组
for(var j=0;j<arrClassName.length;j++){
if(arrClassName[j] == str){
arr.push(arrAllElements[i]);
}
}
}
//(4).如果不是,不用管。
//(5).返回数组
return arr;
}

三.DOM中节点的获取也需考虑兼容性
1、获取下一个兄弟节点
nextSibling:主要是IE678支持。(获取下一个元素节点)但是在火狐谷歌IE9+获取下一个节点。(包括文本和换行)
nextElementSibling:火狐谷歌IE9+支持获取下一个兄弟元素节点,但在IE678中不存在。兼容写法:
var  aaa =  box.nextElementSibling || box.nextSibing;

2.获取上一个兄弟节点
previousSibling:主要是IE678支持。(获取上一个元素节点;但是在火狐谷歌IE9+获取下一个节点。(包括文本和换行)
previousElementSibling:火狐谷歌IE9+支持获取上一个兄弟元 素节点。在IE678中不存在。兼容写法:
var a=box.previousElementSibling || box.previousSibing;

3.获取第一个子节点
var  aaa  =  box.firstElementChild || box.firstChild;

4.获取最后一个子节点
var a=box.lastElementChild || box.lastChild;
...全文
263 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
胡琦博客 2016-04-20
  • 打赏
  • 举报
回复
感谢各位大神的指点
街头小贩 2016-04-16
  • 打赏
  • 举报
回复
都是ie托了程序员下班的时间
顾小林 2016-04-15
  • 打赏
  • 举报
回复
先给楼主赞一个,如果可以的话,为什么不试试用jquery呢 很多兼容性的问题 就可以避免了

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧