DOM中Javascript與css中的常見問題

來源:互聯網
上載者:User

這個算是一個參考文檔吧!
1.
集合類對象問題

現有代碼中許多集合類對象取用時使用 (),IE 能接受,Firefox 不能。
解決方案:改用 []
作為下標運算。如:document.forms("formName") 改為

Js代碼 
  1. document.forms["formName"];   
  2. //又如:
      
  3. document.getElementsByName("inputName")(1);   
  4. //改為
      
  5. document.getElementsByName("inputName")[1];  
document.forms["formName"];//又如:document.getElementsByName("inputName")(1);//改為document.getElementsByName("inputName")[1];

2.
DIV對象

在 IE 中,DIV對象可以使用ID作為物件變數名直接使用。在 Firefox 中不能。

DivId.style.display = "none";

解決方案:document.getElementById("DivId").style.display = "none";

ps:得對象的方法不管是不是DIV對象,都應該使用getElementById方法。

3.
關於frame

現有問題:在 IE中 可以用window.testFrame取得該frame,mf中不行

解決方案:在frame的使用方面Firefox和IE的最主要的區別是:
如果在frame標籤中書寫了以下屬性:

那麼IE可以通過id或者name訪問這個frame對應的window對象
而mf只可以通過name來訪問這個frame對應的window對象

例如如果上述frame標籤寫在最上層的window裡面的htm裡面,那麼可以這樣訪問
IE:
window.top.frameId或者window.top.frameName來訪問這個window對象

Firefox:只能這樣window.top.frameName來訪問這個window對象

另外,在mf和ie中都可以使用window.top.document.getElementById("frameId")來訪問frame標籤

並且可以通過window.top.document.getElementById("testFrame").src =
'xx.htm'來切換frame的內容
也都可以通過window.top.frameName.location =
'xx.htm'來切換frame的內容

4. 視窗

現有問題:IE中可以通過showModalDialog和showModelessDialog開啟模態和非模態視窗,但是Firefox不支援。

解決辦法:直接使用window.open(pageURL,name,parameters)方式開啟新視窗。

如果需要傳遞參數,可以使用frame或者iframe。

5.
在JS中定義各種物件變數名時,盡量使用id,避免使用name.

在 IE 中,HTML 對象的 ID 可以作為 document
的下屬物件變數名直接使用。在 Firefox 中不能,所以在平常使用時請盡量使用id,避免只使用name,而不使用id。

6. document.all
Firefox可以相容document.all,
但會產生一條警告。可以用getElementById("*") 或者 getElementByTagName("*)來代替

不過對於document.all.length等屬性,則完全不相容。大家盡量不要使用document.all屬性.

7. parentElement

IE中支援使用parentElement和parentNode擷取父節點.
而Firefox只可以使用parentNode.

8. event
W3C不支援windows.event
比方說,在IE裡面:
Js代碼 

  1. function onMenuClick(){
      
  2.     collapseMenu(event.srcElement);   
  3. }  
function onMenuClick(){collapseMenu(event.srcElement);}

工作正常。不過在Firefox中,則改成: Js代碼 

  1. function onMenuClick(evt){
      
  2.     if(evt == null)
      
  3.     evt = window.event; // For IE   
  4.     var srcElement = evt.srcElement? evt.srcElement : evt.target;
      
  5.     // IE使用srcElement, 而Firefox使用target
      
  6.     collapseMenu(srcElement);  
function onMenuClick(evt){if(evt == null)evt = window.event; // For IEvar srcElement = evt.srcElement? evt.srcElement : evt.target;// IE使用srcElement, 而Firefox使用targetcollapseMenu(srcElement);

9. event.x 與 event.y 問題

在IE 中,event 對象有 x, y 屬性,Firefox中沒有。
解決方案:
在Firefox中,與event.x 等效的是
event.pageX。但event.pageX IE中沒有。
故採用 event.clientX 代替 event.x。在IE 中也有這個變數。

event.clientX 與 event.pageX 有微妙的差別(當整個頁面有捲軸的時候),
不過大多數時候是等效的。

如果要完全一樣,可以稍麻煩些: Js代碼 

  1. mX = event.x ? event.x : event.pageX;  
mX = event.x ? event.x : event.pageX;

然後用
mX 代替 event.x

10. 用idName字串取得對象的問題
在IE中,利用
eval(idName) 可以取得 id 為 idName 的 HTML 對象,在Firefox中不能。
解決辦法:用
getElementById(idName) 代替 eval(idName).

14. nodeName 和
tagName 問題

在Firefox中,所有節點均有 nodeName 值,但 textNode 沒有 tagName 值。

在IE中nodeName 的使用有時會有問題。
解決方案:
使用 tagName,但應檢測其是否為空白。

15. input的type屬性
IE下
input.type屬性為唯讀,但是Firefox下可以修改.

16. 自訂屬性

在mf中,自己定義的屬性必須getAttribute()取得
而IE可以直接通過"."運算子擷取.

17.const 問題
在 IE 中不能使用 const 關鍵字。如
const
constVar = 32;
在IE中這是語法錯誤.
解決方案:
不使用 const ,以 var 代替.

18. body 對象

Firefox的body在body標籤沒有被瀏覽器完全讀入之前就存在,而IE則必須在body完全被讀入之後才存在.

19. img對象alt和title的解析
alt:當照片不存在或者load錯誤時的提示,

title:照片的tip說明,

在IE中如果沒有定義title,alt也可以作為img的tip使用,但是在Firefox中,兩者完全按照標準中的定義使用

在定義img對象時,最好將alt和title對象都寫全,保證在各種瀏覽器中都能正常使用

20.childNodes擷取的節點

childNodes的下標的含義在IE和Firefox中不同,Firefox使用DOM規範,childNodes中會插入空白文本節點。

擷取子節點時,一般可以通過node.getElementsByTagName()來迴避這個問題。

21.removeNode()

Firefox中節點沒有removeNode方法,必須使用如下方法 Js代碼 

  1. node.parentNode.removeChild(node);  
node.parentNode.removeChild(node);

22.innerText

IE支援,FIREFOX不支援
FF中設定內容文本是用textConent屬性.

23.
XMLHTTP的區別

FireFox中的建立方法為: Js代碼 

  1. xmlhttp=new XMLHttpRequest()  
xmlhttp=new XMLHttpRequest()

而在IE中為:
Js代碼 

  1. xmlhttp=new ActiveXObject(”Microsoft.XMLHTTP”)  
xmlhttp=new ActiveXObject(”Microsoft.XMLHTTP”)

24.
img的src重新整理問題

在IE 下可以用 可以重新整理圖片,但在FireFox下不行。主要是緩衝問題,在地址後面加個隨機數就解決了:
Js代碼 

  1. myImg.src=this.src+’?'+Math.random();  
myImg.src=this.src+’?'+Math.random();

25.
setAttribute()設定屬性問題

IE中很多屬性都不能用setAttribute進行設定,但Firefox中卻可以,如:

Js代碼 
  1. theDiv.setAttribute('style','color:red');   
  2. //改為:
      
  3. object.style.cssText = 'color:red;';   
  4.   
  5.   
  6. setAttribute('class','styleClass')   
  7. //改為:
      
  8. setAttribute('className','styleClass');   
  9.   
  10.   
  11. obj.setAttribute('onclick','funcitonname();');   
  12. //改為:
      
  13. obj.onclick=function(){fucntionname();};  

-----------------------------------------------------------------------------------------

IE和FIREFOX在解析CSS方面的區別

1.
對高度的解析

IE:將根據內容的高度變化,包括未定義高度的圖片內容,即使定義了高度,當內容超過高度時,將使用實際高度

Firefox:沒有定義高度時,如果內容中包括了圖片內容,Firefox的高度解析是根據印刷標準,這樣就會造成和實際內容高度不符合的情況;當定義了高度,但是內容超過高度時,內容會超出定義的高度,但是地區使用的樣式不會變化,造成樣式錯位。

結論:大家在可以確定內容高度的情況下最好定義高度,如果真的沒有辦法定義高度,最好不用使用邊框樣式,否則樣式肯定會出現混亂!

3.布局問題
當你在寫css的時候,特別是用float:
left(或right)排列一竄圖片時,會發現在firefox裡面正常而IE裡面有問題。無論你用margin:0,還是border: 0來約束,都無濟於事。

其實這裡還有另外一個問題,就是IE對於空格的處理,firefox是忽略的而IE對於塊與塊之間的空格是處理的。也就是說一個div結束後要緊接著一個div寫,中間不要有斷行符號或者空格。不然也許會有問題,比如3px的偏差,而且這個原因很難發現。

非常不走運的是我又碰到了這樣的問題,多個img標籤連著,然後定義的float:
left,希望這些圖片可以連起來。但是結果在firefox裡面正常而IE裡面顯示的每個img都相隔了3px。我把標籤之間的空格都刪除都沒有作用。

後來的解決方案是在img外面套li,並且對li定義margin:
0,這樣就解決了IE和firefox的顯示偏差。IE對於一些模型的解釋會產生很多錯誤問題,只有多多嘗試才能發現原因。

這隻是一些簡單的區別,在做布局和CSS設計時候可以綜合考慮,但最為有效與簡單的解決相容問題還是用TABLE表格,表格在相容性方面有著不錯的表現.

4.滑鼠樣式
firefox不支援hand,但ie支援pointer
解決方案:
統一使用pointer

5. padding 問題
padding 5px 4px 3px 1px
FireFox無法解釋簡寫,
必須改成 padding-top:5px; padding-right:4px; padding-bottom:3px;
padding-left:1px;

6. 消除ul、ol等列表的縮排

消除ul、ol等列表的縮排樣式應寫成:list-style:none;margin:0px;padding:0px;

其中margin屬性對IE有效,padding屬性對FireFox有效

7. CSS透明

IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。

FF:opacity:0.6。

8. 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;。

9. 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;

10.
濾鏡

IE中支援使用濾鏡,而Firefox中不支援.

11. 禁止選取網頁內容:

在IE中一般用js:obj.onselectstart=function(){return false;};

而firefox用CSS:-moz-user-select:none; 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.