JavaScript浏览器兼容问题

1、获取当前css样式

function getStyle(node, styleAttr){
		if(node.currentStyle){
			return node.currentStyle[styleAttr];
		}else{
			return getComputedStyle(node)[styleAttr];
		}
}

2、通过class获取元素节点。

//兼容IE8以下  通过class获取元素节点。	
function elementsByClassName(parentNode, className){
		var arr = [];
		var nodes = parentNode.getElementsByTagName("*");
		for(var i = 0; i < nodes.length; i++){
			if(nodes[i].className == className){
				arr.push(nodes[i]);
			}
		}
		return arr;
	}

3、获取当前滚动的距离

//获取当前滚动距离
		window.onload = function(){
			document.onclick = function(){
				var srcollTop = document.documentElement.srcollTop || document.body.srcollTop;
				alert(srcollTop);//浏览器兼容
				var srcollLeft = document.documentElement.srcollLeft || document.body.srcollLeft;
				alert(srcollLeft);//浏览器兼容
			}
		}

4、事件对象属性
说明:IE下,event对象有x,y属性,但是没有pageX,pageY属性;
Firefox下,event对象有pageX,pageY属性,但是没有x,y属性.
解决方法:使用mX(mX = event.x ? event.x : event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX.

  //事件对象属性
document.onclick=function(ev){//谷歌火狐的写法,IE9以上支持,往下不支持;
    var e=ev;
    console.log(e);
  }
  document.onclick=function(event){//谷歌和IE支持,火狐不支持;
    var e=event;
    console.log(e);
  }
  document.onclick=function(ev){//兼容写法;
    var e=ev||window.event;
    var mouseX=e.clientX;//鼠标X轴的坐标
    var mouseY=e.clientY;//鼠标Y轴的坐标
  }

5、事件的目标/触发事件的元素节点(target)(IE8以下不支持)(IE8以下用window.event.srcElement)

问题说明:IE下,even对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性。
解决方法:使用srcObj = event.srcElement ?event.srcElement : event.target;

//事件的目标/触发事件的元素节点(target)(IE8以下不支持)(IE8以下用window.event.srcElement)
			oBtn.onclick = function(ev){
					var e = ev || window.event;
					alert(e.target.innerHTML);
					// 1、IE8以下不支持这么获取触发对象 window.event.srcElement;
					// 2、target和this没有任何关系。
					var target = e.target || window.event.srcElement;
					alert(target);
				}

6、键盘事件属性–keyCode键码(IE8以下不兼容【which】)

//键盘事件属性--keyCode键码(IE8以下不兼容【which】)
			window.onkeydown = function(ev){
					var e = ev || window.event;
					var which = e.keyCode || e.which;
					alert(which);   //IE8以下不兼容
				}

7、charCode字符编码(IE8以下不兼容【which】)

//charCode字符编码(IE8以下不兼容【which】)
			window.onkeypress = function(ev){
					var e = ev || window.event;
					// alert(e.charCode)
					alert(String.fromCharCode(e.charCode));
					// alert(e.which);
					var which = e.charCode || e.which;
					alert(which)
				}

8、阻止超链接的默认行为

//阻止超链接的默认行为
			//跨浏览器的阻止默认行为
			function preDef(e){
				if(e.preventDefault){
					e.preventDefault();
				}else{
					window.event.returnValue = false;
				}
			}

9、阻止事件冒泡

阻止冒泡

cancelBubble=true stopPropagation()

//阻止事件冒泡
			/*阻止冒泡
			cancelBubble=true        stopPropagation()*/
			function stopBubble(e){
				if(e.stopPropagation){
					e.stopPropagation();
				}else{
					e.cancelBubble = true;
				}
			}

10、浏览器宽高问题

var winW=document.body.clientWidth||document.docuemntElement.clientWidth;//网页可见区域宽
  var winH=document.body.clientHeight||document.docuemntElement.clientHeight;//网页可见区域宽
  //以上为不包括边框的宽高,如果是offsetWidth或者offsetHeight的话包括边框

  var winWW=document.body.scrollWidth||document.docuemntElement.scrollWidth;//整个网页的宽
  var winHH=document.body.scrollHeight||document.docuemntElement.scrollHeight;//整个网页的高

  var scrollHeight=document.body.scrollTop||document.docuemntElement.scrollTop;//网页被卷去的高
  var scrollLeft=document.body.scrollLeft||document.docuemntElement.scrollLeft;//网页左卷的距离

  var screenH=window.screen.height;//屏幕分辨率的高
  var screenW=window.screen.width;//屏幕分辨率的宽
  var screenX=window.screenLeft;//浏览器窗口相对于屏幕的x坐标(除了FireFox)
  var screenXX=window.screenX;//FireFox相对于屏幕的X坐标
  var screenY=window.screenTop;//浏览器窗口相对于屏幕的y坐标(除了FireFox)
  var screenYY=window.screenY;//FireFox相对于屏幕的y坐标

11、事件监听器
addEventListener() 方法用于向指定元素添加事件句柄,IE8及其以下不支持,火狐和谷歌支持。
removeEventListener() 方法移除由 addEventListener() 方法添加的事件函数:
IE事件处理函数及浏览器兼容写法
IE事件处理函数
IE 实现了与 DOM 中类似的两个方法:attachEvent()和 detachEvent()。这两个方法接受相同的参数:事件名称和函数。

//添加事件
		function addEvent(node,eventType,func){//node添加在谁的身上;eventType事件类型;func函数
			if(node.addEventListener){
				node.addEventListener(eventType,func,false);
			}else{
				node.attachEvent("on" + eventType,func);
			}
		}
		//删除事件
		function removeEvent(node,eventType,func){
			if(node.removeEventListener){
				node.removeEventListener(eventType,func,false);
			}else{
				node.detachEvent("on" + eventType,func);
			}
		}

11、const问题
说明:Firefox下,可以使用const关键字或var关键字来定义常量;
IE下,只能使用var关键字来定义常量.
解决方法:统一使用var关键字来定义常量.

12、window.location.href问题

说明:IE或者Firefox2.0.x下,可以使用window.location或window.location.href;
Firefox1.5.x下,只能使用window.location.
解决方法:使用window.location来代替window.location.href.

13、元素到浏览器边缘的距离

function offsetTL(obj){//获取元素内容距离浏览器边框的距离(含边框)
    var ofL=0,ofT=0;
    while(obj){
      ofL+=obj.offsetLeft+obj.clientLeft;
      ofT+=obj.offsetTop+obj.clientTop;
      obj=obj.offsetParent;
    }
    return{left:ofL,top:ofT};
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值