使用什么而不是document.all

时间:2014-01-08 10:03:09

标签: javascript internet-explorer cross-browser

我有一些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所以我必须能够区分。

3 个答案:

答案 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;
    }
}

jsFiddle demo

答案 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的所有版本中使用。