css部分: IE6 IE7 IE8 Firefox Chrome Safari !important Y Y _ Y * Y Y *+ Y \9 Y Y Y \0 Y nth-of-type(1) Y Y 示例代码: #test{ color:red; /* 所有浏览器都支持 */ color:red !important;/* Firefox、IE7支持 */ _color:red; /* IE6支持 */ *color:red; /* IE6、IE7支持 */ *+color:red; /* IE7支持 */ color:red\9; /* IE6、IE7、IE8支持 */ color:red\0; /* IE8支持 */ } body:nth-of-type(1) p{color:red;} /* Chrome、Safari支持 */ 1、CSS透明 IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60) FF:opacity:0.6 2、cursor:hand VS cursor:pointer FF不支持hand,但ie支持pointer 解决方法: 统一使用pointer 3、padding 问题 padding 5px 4px 3px 1px FireFox无法解释简写, 必须改成 padding-top:5px; padding-right:4px; padding-bottom:3px; padding-left:1px; 4、消除ul/ol等列表的缩进时 样式应写成:list-style:none;margin:0px;padding:0px; 其中margin属性对IE有效,padding属性对FireFox有效 5、CSS圆角 IE:不支持圆角 FF: -moz-border-radius:4px,或者-moz-border-radius-topleft:4px;-moz-border- radius-topright:4px;-moz-border- radius-bottomleft:4px;-moz-border-radius- bottomright:4px; 6、CSS双线凹凸边框 IE:border:2px outset; FF: -moz-border-top-colors: #d4d0c8 white;-moz-border-left-colors: #d4d0c8 white; -moz-border-right-colors:#404040 #808080;-moz-border-bottom-colors:#404040 #808080; 7、table边框 .ctb { border-top: 1px solid #3E4093; border-left: 1px solid #3E4093; border-right: 0px; border-bottom: 0px; } .ctb td{ border-top: 1px solid #F4F4FF; border-left: 1px solid #F4F4FF; border-right: 1px solid #3E4093; border-bottom: 1px solid #3E4093; } ------------------------------------------------------------------------------------------------------------------------------------------- js部分: 1、window.event function gotoSubmit(e) { e = e? e : (window.event ? window.event : null); } 2、IE:interText ;FF:interHTML或者textContent 3、获取鼠标位置: 在IE 中,event 对象有 x, y 属性,FF中没有。 在FF中,与event.x 等效的是 event.pageX。但event.pageX IE中没有。 解决方法:mX = event.clientX ? event.clientX : event.pageX; 4、event.srcElement问题 说明:IE下,even对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有 srcElement属性. 解决方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox 下的event.target. 或者 if(document.all) { obj = event.srcElement ; } else { obj = arguments[0].target; } 5、window.location.href问题 说明:IE或者Firefox2.0.x下,可以使用window.location或 window.location.href;Firefox1.5.x下,只能使用window.location. 解决方法:使用window.location来代替window.location.href. 6、模态和非模态窗口问题 说明:IE下,可以通过showModalDialog和showModelessDialog打开模态和非模态窗口;Firefox下则不能. 解决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口 如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用window.opener来访问父窗口. 例如:var parWin = window.opener; parWin.document.getElementById("Aqing").value = "Aqing"; 7、FF中类似 obj.style.height = imgObj.height 的语句无效 解决方法: obj.style.height = imgObj.height + 'px'; 8、捕获事件 if (document.all) window.document.attachEvent("onclick",gorush); else window.document.addEventListener("click",gorush,false) 9、判断浏览器类型: var isIE=document.all? true:false; 10、 如果在frame标签中书写了以下属性: <frame src="/xx.htm" id="frameId" name="frameName" /> 那么ie可以通过id或者name访问这个frame对应的window对象 而FF只可以通过name来访问这个frame对应的window对象 例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问 IE: window.top.frameId或者window.top.frameName来访问这个window对象 FF: 只能这样window.top.frameName来访问这个window对象 另外,在FF和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签 并且可以通过window.top.document.getElementById("testFrame").src = 'xx.htm'来切换frame的内容 也都可以通过window.top.frameName.location = 'xx.htm'来切换frame的内容 11、父结点的问题 在FF中没有 parentElement parentElement.children 而用 parentNode parentNode.childNodes childNodes的下标的含义在IE和FF中不同,FF使用DOM规范,childNodes中会插入空白文本节点。 一般可以通过node.getElementsByTagName()来回避这个问题。当html中节点缺失时,IE和FF对parentNode的解释不同,例如 <form> <table> <input/> </table> </form> FF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点 FF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node) 12、自定义属性问题 说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;FF下,只能使用 getAttribute()获取自定义属性. 解决方法:统一通过getAttribute()获取自定义属性. 13、事件委托方法 IE:document.body.onload = inject; //Function inject()在这之前已被实现 FF:document.body.onload = inject(); 如果要加传递参数,可以做个闭包 (function(arg){ document.body.onload=function(){inject(arg);}; })(arg) 14、css"float"属性 IE:document.getElementById("header").style.styleFloat = "left"; FF:document.getElementById("header").style.cssFloat = "left"; 15、获取label标签“for”属性 IE: var myObject = document.getElementById("myLabel"); var myAttribute = myObject.getAttribute("htmlFor"); FF: var myObject = document.getElementById("myLabel"); var myAttribute = myObject.getAttribute("for"); 对于 setAtrribute 方法来说也是同样的语法。 16、获取视窗或浏览器窗口的尺寸 IE : var myBrowserSize = [0, 0]; myBrowserSize[0] = document.documentElement.clientWidth; myBrowserSize[1] = document.documentElement.clientHeight; FF: var myBrowserSize = [0, 0]; myBrowserSize[0] = window.innerWidth; myBrowserSize[1] = window.innerHeight; 17、设置滤镜: IE: var myObject = document.getElementById("myElement"); myObject.style.filter = "alpha(opacity=80)"; FF: var myObject = document.getElementById("myElement"); myObject.style.opacity = "0.5"; 18、.在取得网页窗口区域和获取滚动条位移距离时也要用document.documentElement 即这四个属性(clientWidth、 clientHeight、scrollLeft、scrollTop)一定要用document.documentElement 但是 document.body.appendChild()和document.body.removeChild()却是可以用的,而且用 document.documentElement.appendChild()和 document.documentElement.removeChild()代替却会报错; 总结了一下仅 clientWidth、clientHeight、scrollLeft、scrollTop和 document.documentElement.style时才用document.documentElement 19、body问题 Firefox的body在body标签没有被浏览器完全读入之前就存在;而IE的body则必须在body标签被浏览器完全读入之后才存在. 例如: FF: <body> <script type="text/javascript"> document.body.onclick = function(evt){ evt = evt || window.event; alert(evt); } </script> </body> IE&Firefox: <body> </body> <script type="text/javascript"> document.body.onclick = function(evt){ evt = evt || window.event; alert(evt); } </script> 20、幻灯片效果 if(document.all){ filters[0].Apply(); document.getElementById(imageid).src=path;//更换图片 filters[0].play(); } else{ firfoxPlays(path,imageid) } var intTimeStep=20; var intAlphaStep=0.04; var curSObj=null; var curOpacity=null; function firfoxPlays(path,imageid) { curSObj=document.getElementById(imageid); curSObj.style.opacity=0; curSObj.src=path; curOpacity=0; setObjOpen(); } function setObjOpen() { curOpacity+=intAlphaStep; curSObj.style.opacity =curOpacity; if (curOpacity<1) { setTimeout('setObjOpen()',intTimeStep); } } 21、offsetLeft问题 var amount=7;//每次移动7(速度) if(!document.all) { var f=document.getElementById(flashDiv); f.style.left=(f.offsetLeft-amount )+'px'; } else{ document.getElementById(flashDiv).style.pixelLeft -= amount; } 22、判断浏览器 if (navigator.userAgent.indexOf("Firefox") > -1) 其他同理 23、document.documentElement.scrollTop 在safari和chrome下为 document.documentElement.scrollTop+document.body.scrollTop 24、//聚焦控件后把光标放到最后 function getSelectPos(obj) { var esrc = document.getElementById(obj); if(esrc==null) { if(document.all) { esrc = event.srcElement ; } else { esrc = arguments[0].target; } } window.setTimeout(function(){esrc.focus();},0); } |
|