常見(jiàn)的兼容問(wèn)題有哪些 ?
常見(jiàn)的兼容問(wèn)題有哪些 ?

推薦答案
常見(jiàn)的兼容問(wèn)題有哪些 ?
獲取標(biāo)簽節(jié)點(diǎn):
document.getElementsByClassName('類名')在低版本ie中不兼容。解決方法是使用其他方式獲取:
document.getElementById('id名')
document.getElementsByTagName('標(biāo)簽名')
document.getElementsByName('name屬性值')
document.querySelector('css選擇器')
document.querySelectorAll('css選擇器')
復(fù)制代碼
* 獲取卷去的高度
復(fù)制代碼
// 當(dāng)有文檔聲明的時(shí)候
document.documentElement.scrollTop
document.documentElement.srollLeft
// 沒(méi)有文檔聲明的時(shí)候
document.body.scrollTop
document.body.scrollLeft
復(fù)制代碼
* 解決辦法使用兼容寫法:
復(fù)制代碼
// 獲取
var t = document.documentElement.scrollTop || document.body.scrollTop
var l = document.documentElement.srollLeft || document.body.scrollLeft
// 設(shè)置
document.documentElement.scrollTop = document.body.scrollTop = 數(shù)值
document.documentElement.srollLeft = document.body.scrollLeft = 數(shù)值
復(fù)制代碼
獲取樣式
// W3C標(biāo)準(zhǔn)瀏覽器
window.getComputedStyle(元素)
// 低版本IE中
元素.currentStyle
復(fù)制代碼
使用函數(shù)封裝的方式兼容:
function getStyle(ele,attr){
if(window.getComputedStyle){
return getComputedStyle(ele)[attr]
}else{
return ele.currentStyle[attr]
}
}
復(fù)制代碼
事件偵聽(tīng)器
// W3C瀏覽器
ele.addEventListener(事件類型,函數(shù))
// 低版本Ie
ele.attachEvent('on事件類型',函數(shù))
復(fù)制代碼
使用函數(shù)封裝的方式解決:
function bindEvent(ele,type,handler){
if(ele.addEventListener){
ele.addEventListener(type,handler)
}else if(ele.attachEvent){
ele.attachEvent('on'+type,handler)
}else{
ele['on'+type] = handler
}
}
復(fù)制代碼
事件解綁
// W3C瀏覽器
ele.removeEventListener(事件類型,函數(shù))
// 低版本Ie
ele.detachEvent('on事件類型',函數(shù))
復(fù)制代碼
使用函數(shù)封裝的方式解決:
function unBind(ele,type,handler){
if(ele.removeEventListener){
ele.removeEventListener(type,handler)
}else if(ele.detachEvent){
ele.detachEvent('on'+type,handler)
}else{
ele['on'+type] = null
}
}
復(fù)制代碼
事件對(duì)象的獲取
// W3C瀏覽器
元素.on事件類型 = function(e){}
元素.addEventListener(事件類型,fn)
function fn(e){
}
// 在低版本IE中
元素.on事件類型 = function(){ window.event }
元素.addEventListener(事件類型,fn)
function fn(){
window.event
}
復(fù)制代碼
使用短路運(yùn)算符解決:
元素.on事件類型 = function(e){
var e = e || window.event
}
元素.addEventListener(事件類型,fn)
function fn(e){
var e = e || window.event
}
復(fù)制代碼
阻止默認(rèn)行為
// W3C瀏覽器
元素.on事件類型 = function(e){
e.preventDefault()
}
// 在低版本IE中
元素.on事件類型 = function(){ window.event.returnValue = false }
復(fù)制代碼
通過(guò)封裝函數(shù)解決;
元素.on事件類型 = function(e){
var e = e || window.event
e.preventDefault?e.preventDefault():e.returnValue=false
}
復(fù)制代碼
阻止事件冒泡
// W3C瀏覽器
元素.on事件類型 = function(e){
e.stopPropagation()
}
// 在低版本IE中
元素.on事件類型 = function(){ window.event.cancelBubble = true }
復(fù)制代碼
通過(guò)函數(shù)封裝解決:
元素.on事件類型 = function(e){
var e = e || window.event
e.stopPropagation?e.stopPropagation():e.cancelBubble=true
}
復(fù)制代碼
獲取精準(zhǔn)的目標(biāo)元素
// W3C瀏覽器
元素.on事件類型 = function(e){
e.target
}
// 在低版本IE中
元素.on事件類型 = function(){ window.event.srcElement }
復(fù)制代碼
通過(guò)短路運(yùn)算符解決:
元素.on事件類型 = function(e){
var e = e || window.event
var target = e.target || e.srcElement;
}
復(fù)制代碼
獲取鍵盤碼
// W3C瀏覽器
元素.on事件類型 = function(e){
e.keyCode
}
// 在低版本火狐中
元素.on事件類型 = function(e){
e.which
}
復(fù)制代碼
通過(guò)短路運(yùn)算符解決:
元素.on事件類型 = function(e){
var e = e || window.event
var keycode = e.keyCode || e.which;
}

熱議問(wèn)題






