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 解決方法: 統(tǒng)一使用pointer 3、padding 問題 padding 5px 4px 3px 1px FireFox無法解釋簡寫, 必須改成 padding-top:5px; padding-right:4px; padding-bottom:3px; padding-left:1px; 4、消除ul/ol等列表的縮進(jìn)時 樣式應(yīng)寫成: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、獲取鼠標(biāo)位置: 在IE 中,event 對象有 x, y 屬性,F(xiàn)F中沒有。 在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、模態(tài)和非模態(tài)窗口問題 說明:IE下,可以通過showModalDialog和showModelessDialog打開模態(tài)和非模態(tài)窗口;Firefox下則不能. 解決方法:直接使用window.open(pageURL,name,parameters)方式打開新窗口 如果需要將子窗口中的參數(shù)傳遞回父窗口,可以在子窗口中使用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標(biāo)簽中書寫了以下屬性: <frame src="/xx.htm" id="frameId" name="frameName" /> 那么ie可以通過id或者name訪問這個frame對應(yīng)的window對象 而FF只可以通過name來訪問這個frame對應(yīng)的window對象 例如如果上述frame標(biāo)簽寫在最上層的window里面的htm里面,那么可以這樣訪問 IE: window.top.frameId或者window.top.frameName來訪問這個window對象 FF: 只能這樣window.top.frameName來訪問這個window對象 另外,在FF和ie中都可以使用window.top.document.getElementById("frameId")來訪問frame標(biāo)簽 并且可以通過window.top.document.getElementById("testFrame").src = 'xx.htm'來切換frame的內(nèi)容 也都可以通過window.top.frameName.location = 'xx.htm'來切換frame的內(nèi)容 11、父結(jié)點(diǎn)的問題 在FF中沒有 parentElement parentElement.children 而用 parentNode parentNode.childNodes childNodes的下標(biāo)的含義在IE和FF中不同,F(xiàn)F使用DOM規(guī)范,childNodes中會插入空白文本節(jié)點(diǎn)。 一般可以通過node.getElementsByTagName()來回避這個問題。當(dāng)html中節(jié)點(diǎn)缺失時,IE和FF對parentNode的解釋不同,例如 <form> <table> <input/> </table> </form> FF中input.parentNode的值為form, 而IE中input.parentNode的值為空節(jié)點(diǎn) FF中節(jié)點(diǎn)沒有removeNode方法,必須使用如下方法 node.parentNode.removeChild(node) 12、自定義屬性問題 說明:IE下,可以使用獲取常規(guī)屬性的方法來獲取自定義屬性,也可以使用getAttribute()獲取自定義屬性;FF下,只能使用 getAttribute()獲取自定義屬性. 解決方法:統(tǒng)一通過getAttribute()獲取自定義屬性. 13、事件委托方法 IE:document.body.onload = inject; //Function inject()在這之前已被實現(xiàn) FF:document.body.onload = inject(); 如果要加傳遞參數(shù),可以做個閉包 (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標(biāo)簽“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、設(shè)置濾鏡: IE: var myObject = document.getElementById("myElement"); myObject.style.filter = "alpha(opacity=80)"; FF: var myObject = document.getElementById("myElement"); myObject.style.opacity = "0.5"; 18、.在取得網(wǎng)頁窗口區(qū)域和獲取滾動條位移距離時也要用document.documentElement 即這四個屬性(clientWidth、 clientHeight、scrollLeft、scrollTop)一定要用document.documentElement 但是 document.body.appendChild()和document.body.removeChild()卻是可以用的,而且用 document.documentElement.appendChild()和 document.documentElement.removeChild()代替卻會報錯; 總結(jié)了一下僅 clientWidth、clientHeight、scrollLeft、scrollTop和 document.documentElement.style時才用document.documentElement 19、body問題 Firefox的body在body標(biāo)簽沒有被瀏覽器完全讀入之前就存在;而IE的body則必須在body標(biāo)簽被瀏覽器完全讀入之后才存在. 例如: 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、//聚焦控件后把光標(biāo)放到最后 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); } |
|