實現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

          <2010年8月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 炎陵县| 泗洪县| 调兵山市| 丁青县| 双城市| 寻甸| 保靖县| 巨鹿县| 将乐县| 玛沁县| 门源| 隆昌县| 敖汉旗| 沙坪坝区| 庆安县| 克山县| 灵宝市| 乐安县| 绍兴市| 阿尔山市| 内丘县| 隆子县| 凭祥市| 龙海市| 宝坻区| 玛多县| 沂南县| 黄骅市| 砚山县| 铁力市| 深州市| 沾化县| 大同市| 宁津县| 商洛市| 巴楚县| 抚松县| 株洲市| 江孜县| 白银市| 六安市|