jQuery.css()for IE Only样式

时间:2010-09-09 18:32:49

标签: jquery css internet-explorer-7 internet-explorer-6

我正在使用jQuery在子菜单中定位元素。 html看起来像:

<div class="menu">
    <div>
        <a>Menu Option</a>
        <div class="submenu">
            <div><a>Submenu Option</a></div>
        </div>
    </div>
</div>

菜单有位置:相对,子菜单有位置:绝对。 IE8和FF正在菜单的正下方渲染子菜单并保持对齐。 IE7将子菜单与菜单内联,直接在其兄弟a之后。在我们的CSS中,我们使用“* margin-top:40px”将菜单垂直移动到正确的位置。

在我们的javascript中,我们使用jquery水平对齐子菜单。在FF和IE8中,这可以通过以下方式完成:$(this).css("margin-left", $(this).parent().position().left - 1);在IE7中$(this).css("margin-left", -1 * ($(this).siblings('a').width() + 51));将正确对齐菜单(51表示填充,“this”表示两种情况下的div.submenu。)

我尝试更改第二个语句以更改“* margin-left”而不是“margin-left”的css,但这似乎不起作用。如何告诉jquery使用IE7的第二行,以及所有其他浏览器的第一行?

分辨率:

我首先尝试了这个,因为不推荐使用jquery的.browser方法。这没用。

<!-- [if IE 7]>
<script type="text/javascript">
    $(function () {
        $(".submenu").each(function () {
            $(this).css("margin-left", -1 * ($(this).siblings('a').width() + 51));
    });
});
</script>
<![endif]-->

使用$ .browser再次尝试,这成功。我找不到与使用$ .support进行测试相关的任何内容。

3 个答案:

答案 0 :(得分:4)

您无法使用JavaScript中的*字符等CSS-hacks。尝试使用jQuery的$.browser-object来检测浏览器和版本。对于您的具体情况,那将是:

if ($.browser.msie && $.browser.version < 8) {
    // IE 7 or older
    $(this).css("margin-left", -1 * ($(this).siblings('a').width() + 51));
} else {
    // all other browsers
    $(this).css("margin-left", $(this).parent().position().left - 1);
}

答案 1 :(得分:4)

您可以使用jQuery.browser来检查IE。虽然jQuery团队不推荐使用此功能。尽可能使用特征检测。

答案 2 :(得分:2)

使用条件评论

<!--[if IE 7]>
Special instructions for IE 7 here
<![endif]-->
阅读http://www.quirksmode.org/css/condcom.html