您好,登錄后才能下訂單哦!
今天小編給大家分享一下Java的FE潛規則有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
1 首先是最簡單的select標簽,就有諸多不兼容:
A、 cloneNode方法,對于非IE瀏覽器沒有問題,對于IE瀏覽器,我遇到的問題包括:
1)option selected的會clone不過去,然后會將***個option作為selected值
2)事件clone也會有問題
B、Readonly:對于IE6,可以通過以下方法將select設為readonly:
obj.onbeforeactive=function(){return false}
obj.onfocus=function(){obj.blur();}
obj.onmouseover=function(){obj.setCapture();}
obj.onmouseout=function(){obj.releaseCapture();}
對于其他瀏覽器,我采用的是元素替代法,動態創建一個input標簽,把值賦給它,然后將select隱藏。
C、select的z-index對于IE6無效,網上有很多關于這個討論,jQuery采用一個iframe搞定
D、動態添加option的方法不同,這個網上一搜一大堆
E、對于onclick和onchange的響應不同,在FF下可以在onclick select時動態讀取option值然后構建option,然后選中一個值后執行onchange事件,但是IE下不能這樣做。
2 css對offsetWidth之類的理解不同
http://newleague.iteye.com/blog/765535
3 對于vertical-align baseline的理解不同:
http://w3help.org/zh-cn/causes/RD1016
4 設置背景色
element.style.backgroundColor
在firefox下想改變顏色,必須先設為null,再設為其他顏色才行,即先取消原來的顏色。
在IE下,想取消顏色,必須設為''才行,而換其他顏色,無需先去掉之前的顏色,而如果你設成了null,反倒不行了。
5 不同瀏覽器去padding的理解不同
6 不同瀏覽器對強制換行和強制不換行的理解不同:
最惡心的是對于IE6,如果是<td><span>我是蚊子</span></td>,那么在td上寫了word-break:keep-all依然無效,必須在span上也寫。
7 獲得head節點的方式不同
在Firefox下可以用window.head,而所有瀏覽器都兼容的方式是document.getElementsByTagName('head')[0]
8 往head上添加css code的方法不同,也就是動態添加<style>標簽。
IE下可以用var style=document.createStyleSheet();style.cssText=cssCode;
而有文章說,在Windows上的IE,用createStyleSheet返回的是styleElement的styleSheet,而在Mac上返回的是styleElement自己。
在其他瀏覽器下需要document.createElement('style');
然后還有區分是否具有styleSheet屬性。
這個很容易搜到。
9 對于onchange事件,firefox瀏覽器可以注冊在table,div等組件上,然后通過冒泡,攔截input,select等發出的事件,而IE不行,必須綁定到相應的組件上
10 將input設為readonly=true,其依然會響應keypress,keyup,keydown,onblur事件
11 IE和非IE對于停止冒泡和取消默認行為的方法不同
12 大家都知道IE和非IE在動態添加事件時使用的方法不同,IE是attachEvent,其他是addListener,然后參數也不同。更重要的是如果一個控件綁定了多個function,他們綁定和執行的順序是不同的,IE是跟綁定順序相反,其他是跟綁定順序相同
13 獲得當前事件不同,一個是window.event一個是直接接受event
14 FF下執行offset系列非常慢,但是IE下比較快,而IE的改變CSS的執行非常慢。
Firefox6比Firefox3.6速度快的多,相差好幾百倍(針對一個400行*50列的表格的JS處理)
15 如果大量動態改變css,那么使用document.createDocumentFragment,然后將需要修改樣式的Dom獲取出來appendChild到這個臨時的fragment上,修改完css后再append回去即可,這樣性能能差好幾百倍。
16 瀏覽器加載網頁時,順序讀取html,遇到外部js鏈接會讀進來,然后按順序執行,邊解釋邊執行,而對于外部css,圖片等則是啟動另外的線程連接服務器去獲取。
IE對于CSS引入有限制,我沒試過,但有篇文章討論:http://blog.csdn.net/ydshang/article/details/4158211
17 表格定位某一行,可以通過改變scrollTop來實現,當然如果出現了滾動條的話
18 IE的Dom用完要記得釋放,可以在unload方法中,否則會出現內存泄露
19 unload方法在各個瀏覽器里各不相同,我之前的文章里有介紹。http://sslaowan.iteye.com/blog/1128209
20 我知道了為什么FE最喜歡的瀏覽器是FF,最討厭的是IE6,恨不得IE6去死,其他IE也不怎么樣。但是Chrome,Opera也各有各的bug
21 Ajax當使用同步模式時,如果訪問的鏈接是錯誤的,那么FF會在控制臺報錯,而IE會直接彈出個對話框,然后就崩潰了。
22 FF支持document.getElementsByClass等方法,IE不支持,可以自己寫一個。
23 trim方法在IE和FF下不同,需要自己寫一個,可以用正則表達式
24 動態設置元素的css class在IE和非IE瀏覽器下也不同
25 有時本地字體庫會影響你的字體,大小等顯示,但是有時甚至會影響你的布局
26 字符串也可以使用><等符號比較大小,但是是字符串比較,不要被騙了。
27 JS中this問題非常讓人困惑
28 判斷瀏覽器可以有很多方法,主流是兩大類,agent判斷法和特性法,后者好像更推薦
29 JS是面向對象語言,對象.屬性=值 只影響當前對象,而對象.prototype.屬性則影響整個類。非IE瀏覽器可以覆蓋DOM對象的類方法,但是IE不行。
30 getComputedStyle,獲得外部添加的css,FF支持,IE不支持,具體看這篇文章http://www.jb51.net/article/16128.htm
31 IE和Chrome支持outerHTML方法,其他瀏覽器沒有。相關討論:http://walsh.iteye.com/blog/261966,http://stackoverflow.com/questions/1700870/how-do-i-do-outerhtml-in-firefox
32 還有一個特悲劇的,IE下會把document.[formname.]控件Id當成那個控件,如果把一個控件比如input的id設為了submit,那么form.submit()就會報錯。
2011-8-2***dd
33 如果利用全角空格進行布局時,Firefox支持,而IE會去除只剩一個,但是是在某些情況下的,具體看這篇文章:http://w3help.org/zh-cn/causes/BT1025
34 透明度:
filter:alpha(opacity=0); /* IE */
-moz-opacity:0.3; /* Moz + FF */
opacity: 0.3;
至于用不用var的區別,undefined和null的區別,Ajax構建的不同方式,這些一般的Java程序員都了解了。
很多Java程序員也會使用JS框架,比如JQuery,Extjs和Dojo,她們都幫我們屏蔽了很多兼容性問題。Dojo提供了Java一樣的面向對象機制。
拋磚引玉,你還遇到過什么陷阱,那些FE都知道,而我們Java工程師不知道?
有同學要求例子,有些只是小知識,有了鏈接,那么給一個我做的過程中寫的實驗程序吧,主要是驗證select,還有readonly之后的input對于keypress等事件的響應:
<head> <script> function addListener(element,e,fn){ if(element.addEventListener){ element.addEventListener(e,fn,false); } else { element.attachEvent("on" + e,fn); } } function getEventSource(event){ event = window.event?window.event:event; var source = event.target || event.srcElement; return source; } function init(e){ var provChoice= document.getElementById('prov'); fillPro(provChoice); addListener(provChoice,'change',fillCity); var coChoice= document.getElementById('country'); addListener(coChoice,'change',function(){alert('a');}); var selects=document.getElementsByTagName('select'); for(var i=0;i<selects.length;i++){ selects[i].cloneNode=function(deep){ var temp=document.createElement('div'); temp.innerHTML=this.outerHTML; return temp.childNodes[0]; } } document.getElementById('cloneCo').appendChild(coChoice.cloneNode(true)); var coTD= document.getElementById('co'); document.getElementById('r1').appendChild(coTD.cloneNode(true)); document.getElementById('abc').readOnly=true; document.getElementById('abc').onkeydown=function(e){ e.preventDefault(); e.stopPropagation(); } document.getElementById('abc').onkeypress=function(e){ alert('b'); } document.getElementById('abc').onchange=function(e){ alert('c'); } document.getElementById('abc').onblur=function(e){ alert('d'); document.getElementById('abc').value='add'; } } function fillPro(pro){ pro.options[0]=new Option('BJ','北京'); pro.options[1]=new Option('TJ','天津'); pro.options[2]=new Option('HLJ','黑龍江'); pro.options[3]=new Option('SH','上海'); } function fillCity(e){ var c= document.getElementById('city'); if( document.getElementById('prov').value=='黑龍江'){ c.options[0]=new Option('HRB','哈爾濱'); c.options[1]=new Option('MDJ','牡丹江'); c.options[2]=new Option('QQHR','齊齊哈爾'); c.options[3]=new Option('JMS','佳木斯'); } } </script> </head> <body onload='init(event)'> <table> <tr id='r1'> <td id='co'> <select id='country' name='country'> <option value='UK'>UK</option> <option value='USA'>USA</option> <option value='CHINA' selected>China</option> </select> </td> <td> <select id='prov' name='prov'></select> </td> <td> <select id='city' name='city'></select> </td> <td id='cloneCo'></td> <td> <input id='abc' value='0' onkeypress='return alert("a1"); '/> </td> <tr> <table> </body> </html>
以上就是“Java的FE潛規則有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。