我有一些JavaScript函数,包括代码:
if (document.all)
{ document.getElementById('subrow').style.display = 'block'; }
else
{ document.getElementById('subrow').style.display = 'table-row'; }
IE 11为false
返回document.all
,因此上述代码不再有效,但我需要它能够用于早期版本的IE以及IE 11和其他浏览器。
我怎样才能实现这一目标?早期版本的IE不理解table-row
所以我必须能够区分。
答案 0 :(得分:1)
不要使用功能检测。
正如您所发现的那样,尝试检测具有间接测试的浏览器(如检查document.all
)非常不可靠。最佳做法是use feature detection, not browser detection。
相反,如果您想知道是否支持table-row
,您可以直接检查。这使您的代码更具可移植性,因为它不会将其与特定版本联系起来。这是基于Modernizr display test for table layout:
function isTableRowSupported() {
try {
var style = document.createElement("div").style;
style.display = 'table-row';
return style.display == 'table-row';
} catch (e) {
return false;
}
}
答案 1 :(得分:0)
您可以使用并检查"ActiveXObject" in window
,而不是适用于所有IE版本。
document.all
是(!)快速检查是否是IE。
所以:
if ("ActiveXObject" in window)
{ document.getElementById('subrow').style.display = 'block'; }
else
{ document.getElementById('subrow').style.display = 'table-row'; }
答案 2 :(得分:0)
而不是document.all,如果你想检查IE,那么就这样做:
if(/msie|trident/i.test(navigator.userAgent)){
document.getElementById('subrow').style.display = 'block';
} else {
document.getElementById('subrow').style.display = 'table-row';
}
注意:Trident是IE的渲染引擎,可在IE的所有版本中使用。