3

随着 jQuery 2.0 的发布,我想知道在使用“条件注释”为 IE8 及更低版本和其他浏览器提供不同版本的 jQuery 时是否可能会出现问题:

<!DOCTYPE html>
    <head>
        <!--[if lte IE 8]>
            <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <![endif]-->

        <!--[if gt IE 8]>
            <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
        <![endif]-->

        <!--[if !IE]> -->
            <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
        <!-- <![endif]-->
    </head>
    <body>

    </body>
</html>

由于发行说明指出,

jQuery 2.0 具有与 jQuery 1.9 相同的 API

我确实认为即使使用大量现有的 jQuery 代码,也可以采用这种方法。我错过了什么吗?

4

1 回答 1

1

意见类型问题:

我的意见

2.0 中的大部分内容都与 HTML5 异常相同。许多“vanilla” JS 函数已被 jQuery 样式标记替换(这只是我对代码的观察),并且代码现在正在使用新实现的“标准”,从而使其与旧 IE 不兼容。

但是,目前,名称间距是相同的。所以我的想法是,我会说它一点也不差,但是,就像以前版本的 jQuery 一样,不要指望在 HTML5 浏览器(Chrome、FF、IE9+)中看起来单一的方式在旧版本中看起来相同浏览器。您可能仍想像以前的版本一样检查可能的 IE 细节。这真的不是什么新鲜事。

通常情况下,一个覆盖的 jQuery 标记会做得很好,但是您可能会注意到细微的差别。例如,IE 7 如何处理特定样式的 .animate,而不是 IE 9 或 10 处理它们的方式。正如我之前所说,这真的不是什么新鲜事。

我个人设计了一个瞄准器以准备好使用最新的标准,然后是“返回版本”以与旧版浏览器兼容。我这样做只是因为,无论我需要投入什么“特定”,与其余代码相比,通常都不算多。此外,当我完成某些东西的开发时,我可能希望支持的旧版本之一可能不再是问题。

如果有帮助的话,MS 已经宣布在接下来的五年左右时间里,对 Vit/IE9 下的所有内容的支持缓慢而稳定地下降。预计对旧版浏览器支持的需求会越来越少。http://support.microsoft.com/gp/lifeadditionalproducts(白皮书中有一篇更好的文章,但在我的电子邮件中,不确定他们的白皮书列表在哪里)

我最近发现的另一个“gotchya”,Firefox 变得越来越像微软。我发现他们非常努力地整合他们的“自己的标准”,并朝着与“我”认为的标准开发相反的方向前进。当我发现“在所有浏览器(甚至 IE7!)中都可以使用,但在 Firefox 中!”时,这已成为一个越来越重要的问题。我还没有进行足够的调查以了解为什么 FF 会发生如此大的变化,但它们肯定会成为开发的新“IE 头痛”。

一个典型的例子是,标题中的 CSS 样式有任何不完整,甚至新 FF 引擎不喜欢的某些 CSS3 标准都会杀死整个页面。就在我的脑海中,我遇到的一个问题(如果我没记错的话,那是几周前的事了)是我对表格行和:after. Firefox 会在我的 CSS 和“BOOM!DOA!”中找到那一行。没有 JS 会起作用,之后的样式也不会起作用。我将那一行更改为使用 and 的组合,nth-child并且+突然不再有 FF 的争论。

我曾经喜欢 FF,但随着 IE 终于迎头赶上,MS 宣布放弃对“bad old carp”的支持,而 Mozilla 转而落后(我再次认为),我将其-mozilla-视为新的“幕后黑手”浏览器,您必须为其制作“条件”语句。


更新 [2013 年 6 月 5 日]
在收到这篇文章的新观点后,我花了一分钟时间回顾它,并认为我会分享我在 jQuery Name-Spacing 中找到的另一个“gotchya”。我不知道为什么我之前没有提到它,除了它有点老而且我想我想大多数人都会知道。但是,由于我最近提供的其他帮助,我发现它非常“未知”。

1.7 版本附带了一个带有 jQ​​uery 的较旧的“gotchya”。如果你查一下,你会发现,他们改变了一个 MAJOR 名称间距,后来被完全弃用了。$.bind$.delegate和的命名空间$.live被替换为和 的更易于遵循的命名$.on空间$.off。对于进入新版本的开发人员来说,这当然有点痛苦,因为它需要if基于版本的声明。

同样,这只是在 1.7+newer 和 > 1.7 的 jQuery 版本之间切换的问题!

如果您选择在新旧 jQuery 之间切换,那么我建议您将委托函数包装在命名方法中。然后可以将它们称为 like $(document).on("event", "element", functionName)。不要忘记命名函数的参数将是event. 此外,如果您错过了解决方案并需要它(if声明),它很简单,如下所示:

if ($.fn.on) {
    /*
     * is using jQuery ver >= 1.7
     * do work as necessary using:
     * $(document).on("event", "selector", callback)
    */
}
else {
    /*
     * is using jQuery ver < 1.7
     * do work as necessary using something like:
     * $(document).live("event", "selector", callback)
    */
}

于 2013-05-21T12:59:12.673 回答