js在IE浏览器和非IE浏览器中的兼容性问题

下面列出IE和非IE中常见的一些js兼容性问题。
 
//window.event  
IE:有window.event对象  
非IE:没有window.event对象。可以通过给函数的参数传递event对象。如onmousemove=doMouseMove(event)  

解除冒泡的方法不同

IE:window.event.cancelBubble=true;
非IE:event.stopPropagation();

IE:会忽略节点之间生成的空白文本节点(比如换行字符)

非IE:不会忽略,会把节点之间的空白当成文本节点。


//鼠标当前坐标  
IE:event.x和event.y。  
非IE:event.pageX和event.pageY。  
通用:两者都有event.clientX和event.clientY属性。    
 
//event.srcElement问题  
说明:IE下,event对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性.  
解决方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox下的event.target. 请同时注意event的兼容性问题。   
 
//添加事件  
IE:element.attachEvent("onclick", function);。  
非IE:element.addEventListener("click", function, true)。  
通 用:element.onclick=function。虽然都可以使用onclick事件,但是onclick和上面两种方法的效果是不一样 的,onclick 只有执行一个过程,而attachEvent和addEventListener执行的是一个过程列表,也就是多个过程。例 如:element.attachEvent("onclick", func1);element.attachEvent("onclick", func2)这样func1和func2都会被执行。  
 
//标签的自定义属性  
IE:如果给标签div1定义了一个属性value,可以div1.value和div1["value"]取得该值。  
非IE:不能用div1.value和div1["value"]取。  
通用:div1.getAttribute("value")。  
 
//集合/数组类对象问题 
(1)现有问题: 
    现有代码中许多集合类对象取用时使用 (),IE 能接受,MF 不能。 
(2)解决方法: 
    改用 [] 作为下标运算。如:document.forms("formName") 改为 document.forms["formName"]。 
    又如:document.getElementsByName("inputName")(1) 改为 document.getElementsByName("inputName")[1] 
 
//HTML 对象的 id 作为对象名的问题 
(1)现有问题 
     在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能。 
(2)解决方法 
     用 getElementById("idName") 代替 idName 作为对象变量使用 
 
//input.type属性问题  
说明:IE下input.type属性为只读;但是Firefox下input.type属性为读写 
 
//body问题  
Firefox的body在body标签没有被浏览器完全读入之前就存在;而IE的body则必须在body标签被浏览器完全读入之后才存在 
 
//firefox与IE的父元素(parentElement)的区别  
IE:obj.parentElement  
非IE:obj.parentNode  
解决方法: 因为非IE与IE都支持DOM,因此使用obj.parentNode是不错选择 
 
//innerText在IE中能正常工作,但是innerText在FireFox中却不行. 需用textContent    

你可能感兴趣的:(浏览器)