js中的一些兼容性问题:
1)获取滚动高度:
document.documentElement.scrollTop || document.body.scrollTop
2)DOM高级选取
firstChild\firstElementChild 第一个子节点
oFirst=oUl.firstElementChild || oUl.firstChild //(位置不能换)
lastChild\lastElementChild 最后一个子节点
oLast=oUl.lastElementChild || oUl.lastChild
兄弟节点(有兼容性问题)
nextSibling\nextElementSibling 下一个节点
oNext=oUl. nextElementSibling || oUl.nextSibling
nextSibling属性返回元素节点之后的兄弟节点(包括文本节点、注释节点即回车、换行、空格、文本等等);
nextElementSibling属性只返回元素节点之后的兄弟元素节点(不包括文本节点、注释节点);
previousSibling\previousElementSibling 上一个节点
oPrevious=oUl. previousElementSibling || oUl. previousSibling
previousSibling 属性返回元素节点之前的兄弟节点(包括文本节点、注释节点);
previousElementSibling 属性只返回元素节点之前的兄弟元素节点(不包括文本节点、注释节点)
3)获取非行内样式的兼容
function getStyle(domobj,attr){
if(window.getComputedStyle){
return getComputedStyle(domobj,null)[attr];
}
return domobj.currentStyle[attr];
}
4)Event对象获取方式
var e = e || event
获取事件源的兼容性写法
evt.target || evt.srcElement
获取键盘信息兼容
keyCode/which
document.onkeydown = function(e){
var evt = e || event;
//判断是否按下了三个热键,值为布尔值
console.log(evt.ctrlKey,evt.altKey,evt.shiftKey);
console.log(evt.keyCode,evt.which);
//var code = evt.keyCode||evt.which;
}
阻止事件冒泡
if (evt.stopPropagation){
evt.stopPropagation();
}esle{
evt.cancelBubble = true;
}//判断stopPropagation是否存在,如果存在则用标准写法否则则用IE的写法,不可反过来判断
5)阻止默认行为的方式
1)、event.preventDefault(); (现代浏览器)
2)、event.returnValue = false; (IE低版本)
3)、return false;
if(evt.preventDefault){
evt.preventDefault();
}else{
evt.returnValue = false;
}
6) 事件监听兼容
添加:
function addEvent(domobj,type,fn){
if(domobj.addEventListener){
domobj.addEventListener(type,fn);
}else{
domobj.attachEvent("on"+type,fn);
}
}
移除:
function removeEvent(domobj,type,fn){
if(domobj.removeEventListener){
domobj.removeEventListener(type,fn);
}else{
domobj.detachEvent("on"+type,fn);
}
}
7).创建ajax对象
if(window.XMLHttpRequest){
var xhr = new XMLHttpRequest();
}else{
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
以上就是我所分享在JS中常见的兼容性写法,还有很多,就不再一一列举了!!