JS中常见的兼容性问题
删除空白节点
function deleteSpace(node){
var child = node.childNodes();
for(var i = 0; i < child.length;i++){
if(child[i].nodeType === 3 && /^\s+$/.test(child[i].nodeValue)){
child[i].parentNode.removeChild(child[i]);
}
}
return node;
}
兼容键盘按键
function getbutton(evt){
var e = evt || window.event;
if(evt){
return event.button;
}else if(window.event){
switch(event.button){
case 1 : return 0;
case 4 : return 1;
case 2 : return 2;
}
}
}
监听事件的兼容
function addEventListener(obj,event,fun,boo){
if(obj.addEventListener){
obj.addEventListener(event,fun,false);
}else{
obj.attachEvent("on"+ event,fun);
}
}
解除监听事件的兼容
function removeEventListener(obj,event,fun,boo){
if(obj.removeEventListener){
obj.removeEventListener(event,fun,false);
}else{
obj.detachEvent("on"+ event,fun);
}
}
使用getAttribute()获取元素class名
getAttribute("class");
IE7及以下版本不支持该方法,
并且在浏览器中的返回值为null
,其他浏览器支持该方法;
getAttribute("className");
// IE7及以下版本支持该方法,其他浏览器不支持
兼容性写法
getAttribute("class") == null ? getAttribute("className"): getAttribute("class");
获取内部和行内样式兼容
function getStyle(obj,attr){
return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,1)[attr];
}
兼容滚动条高度
document.onscroll = function(){
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
}
document.scrollTop = function(){
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
}
阻止冒泡兼容
function maoPao(evt){
var e = evt || window.event;
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancleBubble = true;//IE
}
}
超链接的兼容性
function fnHref(evt){
var e = evt || window.event;
if(e.preventDefault){
e.preventDefault(); //标准
}else{
e.returnValue = false; //IE
}
}
获取className的兼容
function getElementsByClass(className){
if(document.getElementsByClassName){
document.getElementsByClassName(className);
}else{
var arr = [];
var obj = document.getElementsByTagName("*");//兼容IE低版本
for(var i = 0; i < obj.length; i++){
if(obj[i].className == className){
arr.push(obj[i]);
}
}
return arr;
}
}
事件源的兼容性
var target = evt.target || evt.srcElement;
//年份兼容 (火狐获取的年份要减去1900)
一般用 getFullYear();获取年份