我的问题特定于getComputedStyle方法。 ie9支持getComputedStyle,但不支持getComputedStyle的伪元素。通常我会使用这样的支票。

if ( getComputedStyle ) { ...
} else { ... stuff for ie9 }


但是,这对于ie9返回true,因为它确实支持getComputedStyle(尽管它不支持伪元素)。如何检查浏览器是否支持带有伪元素的此方法?

最佳答案

编辑/附录:刚意识到您正在尝试深入研究IE9与其他浏览器之间getComputedStyle()的方式。请注意,如果此脚本不是您想要的,因为它似乎只是测试getComputedStyle()的存在,而不是特定的选择选项。

This site似乎提供了一种跨浏览器检测getComputedStyle的解决方案。具体来说,该代码位于页面底部附近:

<script type="text/javascript">
// First paramter is a nodes id, second the CSS property you want
function getCSSProperty(sNodeId, sProperty)
{
    var oNode = document.getElementById(sNodeId);

    if(document.defaultView)
    {
        return document.defaultView.getComputedStyle(oNode, null).getPropertyValue(sProperty);
    }
    else if(oNode.currentStyle)
    {
        var sProperty = sProperty.replace(/-\D/gi, function(sMatch)
        {
            return sMatch.charAt(sMatch.length - 1).toUpperCase();
        });

        return oNode.currentStyle[sProperty];
    }
    else return null;
}

alert(getCSSProperty("myDiv", "margin-bottom"));
</script>


编辑:原始海报有一个关于正则表达式逻辑的问题,这是我的解释。如果我错了,请让我知道或评论您的想法:

        var sProperty = sProperty.replace(/-\D/gi, function(sMatch)
        {
            return sMatch.charAt(sMatch.length - 1).toUpperCase();
        });


好的,那段代码正在做一个正则表达式替换为实际的正则表达式/-\D/gi。我想使用this guide to regular expressions(aka:regex)可以理解。

/是定界符;魔术发生在他们之间。 -只是与破折号匹配。 \D是一种特殊的符号,表示“匹配任何非数字字符”。 gi特定于正则表达式调用,而explained here则为:“ gi修饰符用于对字符串中所有出现的正则表达式进行不区分大小写的搜索。”

嵌套函数对replace正则表达式中的匹配项起作用,并且基本上对匹配项执行.toUpperCase()

如此看来,您也许可以对它进行调整,以匹配您要检测的更深层次的功能?

关于javascript - 如何检查浏览器是否完全支持javascript方法(例如getComputedStyle伪元素),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14555072/

10-09 14:17