1

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

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

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

4

2 回答 2

1

编辑/附录:刚刚意识到您正在尝试深入了解getComputedStyle()IE9 与其他浏览器的细节。因此请注意,如果此脚本不是您要查找的内容,因为它似乎只是测试是否存在getComputedStyle()而不是特定的选择选项。

该站点似乎提供了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。使用这个正则表达式指南(又名:正则表达式)我想我明白了。

/分隔符;魔法发生在他们之间。-只是匹配破折号。这\D是一个特殊的符号,意思是“匹配任何非数字字符”。并且gi特定于正则表达式调用并在此处解释为:“gi修饰符用于对字符串中所有出现的正则表达式进行不区分大小写的搜索。”</p>

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

因此,您似乎可以对其进行调整以匹配您尝试检测的更深层次的功能?

于 2013-01-28T03:38:57.340 回答
0

可能有更好的方法来做到这一点,但是如果您使用 CSS(或使用 JS)添加特定的伪元素,您可以检查它是否存在,如下所示:

if ( window.getComputedStyle(document.body,':after').getPropertyValue('content') === 1 ) {
// Do stuff
} else { 
// ie fall back
}

在这个例子中,我向 body 标签添加了一个 :after 选择器,并从样式表中添加了一个 content 属性(该属性的值可以是任何值)。

于 2013-01-28T04:03:31.897 回答