實現JavaScript跨瀏覽器
開發跨瀏覽器的JavaScript,并不是一件很容易的事,下面是一些經驗總結。
一、動態向表中添加行
- 問題:IE中,不能將行增加到表table。
- 解決方法:將行增加到表體tbody。
- 示例:點擊查看
二、動態設置元素style屬性
- 問題:IE下支持object.style.cssText="style:value",Firefox下使用object.setAttribute("style", value)
- 解決方法:統一用object.style.屬性=值。
- 示例:點擊查看
三、動態設置元素的Class屬性
- 問題:IE下使用object.setAttribute("className", value),Firefox下使用object.setAttribute("class", value)。
- 解決方法:統一用object.className=value。
- 示例:點擊查看
四、動態創建Input元素
- 問題:IE中先添加元素,后設置的屬性不起作用。
- 解決方法:先添加屬性,再添加元素。
- 示例:點擊查看
五、動態設置標簽內容
- 問題:IE中用innerText屬性,相反地,Firefox下用textContent屬性。
- 解決方法:先判斷瀏覽器類型,再分別設置,當然也可以同時設置。還有一種方法就是用innerHTML來替換。
- 示例:點擊查看
六、增加和刪除Option
- 問題:增加Option時,Firefox下不支持object.add方法。刪除Option時,Firefox下不支持object.options .remove方法。
- 解決方法:增加Option時,使用object.options.add方法。刪除Option時,使用object.remove方法。另外也可以用DOM的AppendChild和removeChild方法。
- 示例:點擊查看?
七、動態創建單選按鈕
- 問題:IE不能用setAttribute方法添加name屬性,相反地,Firefox下不能用createElement(htmlStr)來添加name屬性。
- 解決方法:先判斷瀏覽器類型,再分別設置。當然也可以同時設置。
- 示例:點擊查看
八、document.formName.item("itemName")
- 問題:IE下,可以使用 document.formName.item("itemName") 或 document.formName.elements ["elementName"];Firefox下,只能使用document.formName.elements["elementName"]。
- 解決方法:統一使用document.formName.elements["elementName"]。
九、動態創建單選按鈕
- 問題:IE下,可以使用()或[]獲取集合類對象;Firefox下,只能使用 []獲取集合類對象。
- 解決方法:統一使用[]獲取集合類對象。
十、自定義屬性
- 問題:IE下,可以使用獲取常規屬性的方法來獲取自定義屬性,也可以使用 getAttribute() 獲取自定義屬性;Firefox下,只能使用 getAttribute() 獲取自定義屬性
- 解決方法:統一通過 getAttribute() 獲取自定義屬性。
十一、eval("idName")
- 問題:IE下,可以使用 eval("idName") 或 getElementById("idName") 來取得 id 為 idName 的HTML對象;Firefox下,只能使用 getElementById("idName") 來取得 id 為 idName 的HTML對象。
- 解決方法:統一用 getElementById("idName") 來取得 id 為 idName 的HTML對象。
十二、event.srcElement
- 問題:IE下,even對象有srcElement屬性,但是沒有target屬性;Firefox下,even對象有target屬性,但是沒有srcElement屬性。
- 解決方法:使用srcObj = event.srcElement ? event.srcElement : event.target;
十三、訪問的父元素
- 問題:在IE下,使用obj.parentElement或obj.parentNode訪問obj的父結點;在firefox下,使用obj.parentNode訪問obj的父結點。
- 解決方法:因為firefox與IE都支持DOM,因此統一使用obj.parentNode 來訪問obj的父結點。
十四、innerText
- 問題:innerText在IE中能正常工作,但是innerText在FireFox中卻不行。
- 解決方法:在非IE瀏覽器中使用textContent代替innerText。
十五、模態和非模態窗口問題
- 問題:IE下,可以通過showModalDialog和showModelessDialog打開模態和非模態窗口;Firefox下則不能。
- 解決方法:直接使用 window.open(pageURL,name,parameters) 方式打開新窗口。如果需要將子窗口中的參數傳遞回父窗口,可以在子窗口中使用window.opener來訪問父窗口。如果需要父窗口控制子窗口的話,使用var subWindow = window.open(pageURL,name,parameters); 來獲得新開的窗口對象。
十六、frame和iframe問題
- 問題:要訪問frame對象,IE下使用window.frameId或者window.frameName來訪問這個frame對象;Firefox下使用window.frameName來訪問這個frame對象;
- 解決方法:統一使用 window.document.getElementById("frameId") 來訪問這個frame對象。在IE和Firefox中都可以使用window.document.getElementById("frameId").src 或window.frameName.location來切換frame的內容;如果需要將frame中的參數傳回父窗口,可以在frame中使用parent關鍵字來訪問父窗口。
posted on 2010-08-11 08:28 飛熊 閱讀(373) 評論(0) 編輯 收藏 所屬分類: javaScript