整理 IE和FF在對js支持的不同及解決方法
1.window.event
IE:有window.event對象
FF:沒有window.event對象,可以通過函數的參數傳遞event對象 。如onclick=clickHandler(event)
解決辦法:var event = event || window.event;
2. 鼠標當前坐標
IE:event.x和event.y
FF:event.pageX和event.pageY
解決辦法:采用通用屬性:event.clientX和event.clientY屬性;
3. 鼠標坐標加上滾動條滾過的距離
IE:event.offsetX和event.offsetY
FF:event.layerX和event.layerY
解決辦法:
復制代碼代碼如下:
script type="text/javascript"
function mouseDownHandler(event) {
var event = event || window.event;
//var event = event ? event : window.event;
var x = event.offsetX || event.layerX;
var y = event.offsetX || event.layerY;
}
/script
3. event.srcElement
IE:event對象有srcElement屬性 , 但是沒有target屬性;
FF:event對象有target屬性,但沒有srcElement屬性
解決辦法:使用obj = event.srcElement ? event.srcElement : event.target;來代替IE下的event.srcElement或者FF下的event.target(注意event的兼容性);
4.event.toElement
IE:event對象有toElement屬性,但沒有relatedTarget屬性
FF:event對象沒有有toElement屬性,但有relatedTarget屬性
解決辦法:var target = e.relatedTarget || e.toElement;
5. 標簽的x和y的坐標位置,style.posLeft 和 style.posTop
IE:有
FF:沒有
解決辦法:用通用屬性obj.offsetLeft 和 obj.offsetTop
6. 窗體的高度和寬度
IE:document.body.offsetWidth 和 document.body.offsetHeight 。注意,此時頁面一定要有body標簽 。
FF:window.innerWidth 和 window.innerHeight,以及 document.documentElement.clientWidth 和 document.documentElement.clientHeight 。
解決辦法:通用屬性 document.body.clientWidth 和 document.body.clientHeight;
7. 添加事件
IE:element.attachEvent(’onclick’,function)
FF:element.addEventListener(’click’,function,true)
解決辦法:element.onclick = function.雖然都可以使用click事件 。但onclick和上面兩種方法效果是不一樣的 。onclick只有執行一個過程,而attachEvent 和 addEventListener執行的是一個過程列表 , 也就是多個過程 。
如:element.attachEvent(’onclick’,func1); element.attachEvent(onclick, func2)這樣func1和func2都會被執行 。
8. 標簽的自定義屬性
IE:如果給標簽div1定義了一個屬性value,可以div1.value 和 div1[value]取得該值
FF:不能用div1.value 和div1[value]
解決辦法:div1.getAttribute(’value’)
9. document.form.item
IE:現有問題,document.formName.item(itemName) 這樣的語句 , 不能在 FF 下運行
FF:不支持
解決辦法: document.formName.elements[elementName]
10. 集合/數組類對象問題
IE:有許多集合類對象取用時用()
FF:不能這樣取用
解決辦法:改用[]作為下標運算 。
如:document.forms(formName) 改為 document.forms[formName] 。document.getElementsByName(inputName)(1) 改為 document.getElementsByName(inputName)[1]
11. HTML對象的id作為對象名的問題
IE:HTML對象的id可以作為document的下屬變量名直接使用
FF:需要用getElementById()方法
解決辦法:用getElementById(’idName’)代替idName作為對象變量使用
12. 用idName字符串取得對象的問題
IE:利用eval(idName)可以取得 id 為 idName 的HTML對象 。
FF:不支持
解決辦法:getElementById(idName) 代替 eval(idName)
13. 變量名與某 HTML 對象 id 相同的問題
IE:因為HTML對象id 在IE中直接調用,所以變量名不能和id相同
FF:可以使用變量名和id相同
解決辦法,聲明變量時一律加上 var , 以避免歧義(最好id和變量名不要相同) 。
14. document.getElementsByName() 和 document.all[name]
IE:getElementsByName()、document.all[name] 均不能用來取得 div 元素
FF:可以兼容document.all,但會生成一條警告 。
解決辦法:可以用getElementById() 或者 getElementByTagName()來代替
15. input.type屬性問題
IE:input.type屬性為只讀
FF:input.type屬性為讀寫
16. window.location.href
IE:(FF2.0以下),可以使用window.location 或 window.location.href ; FF 1.5下只能使用window.location
解決辦法:使用window.location 來代替 window.location.href
17. 模態和非模態窗口問題
IE:可以通過 showModalDialog 和 showModelessDialog 打開模態和非模態窗口
FF:不支持
解決辦法:直接使用window.open(pageURL, name, parameters) 方式打開新窗口 , 如果需要將子窗口中的參數傳遞回父窗口,可以在子窗口中使用window.opener來訪問父窗口 。
如:var parWin = window.opener; parWin.document.getElementById(’title’).value = https://www.questions.com.cn/dnjc/’My Title’;
18. body
IE:body必須在body標簽被瀏覽器完全讀入后才存在
FF:body在body標簽沒有被瀏覽器完全讀入之前就存在
19. 事件委托方法
IE:document.body.onload = init;
FF:document.body.onload = init();
解決辦法:統一使用 document.body.onload = new Function(’init()’); 或者 docuement.body.onload = function(){/* 這里是代碼 */}
20. 父元素的區別
IE:obj.parentElement;
FF :obj.parentNode
解決辦法:因為FF與IE都支持DOM,所以可以都使用obj.parentNode
22.innerText在IE中能正常工作,但是innerText在FF中卻不行. 需用textContent
23. FF中設置HTML標簽的style時 , 所有位置性和字體尺寸的值必須后跟px 。這個IE也是支持的
24. 父節點、子節點和刪除節點
IE:parentElement、parement.children,element.romoveNode(true) 。
FF:parentNode、parentNode.childNodes , node.parentNode.removeChild(node) 。
相關經驗推薦
- 文件復制與導入和導出 IE瀏覽器收藏夾的備份與恢復的兩種方法
- IE不能上網瀏覽的常見原因和解決方法
- Win7無法安裝IE10怎么辦 雙顯卡Win7無法安裝IE10的原因和解決方案
- 在Win7/Win8中打開32位版IE10和IE11圖文教程
- Win7版IE10安裝過程中的常見問題整理及解決
- 厘米人AI和厘米秀是一樣的嗎 厘米人AI和厘米秀區別介紹
- ie10 css hack 條件注釋等兼容方式整理
- IE的有條件注釋優點和缺點
- 刪除Metro版 IE10瀏覽器中的臨時文件和歷史記錄的方法
- IE6/7中使用setAttribute設置table的cellpadding和cellspacing的Bug
