基于条件注释为不同的jQuery版本提供服务是一个好主意吗?

基于条件注释为不同的jQuery版本提供服务是一个好主意吗?,jquery,conditional-comments,Jquery,Conditional Comments,随着jQuery 2.0的发布,我想知道在使用“条件注释”为不同版本的IE8和更低版本的jQuery以及其他浏览器提供服务时,是否会出现问题: 由于发行说明中指出 jQuery2.0具有与jQuery1.9相同的API 我确实认为,即使使用大量现有jQuery代码,采用这种方法也可以节省成本。我遗漏了什么吗?意见型问题: 我的意见 除了HTML5之外,2.0中的大部分内容都是相同的。许多“普通的”JS函数已经被jQuery风格的标记所取代(这是我对代码的遵守),代码现在正在使用新实现的“标准

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


由于发行说明中指出

jQuery2.0具有与jQuery1.9相同的API

我确实认为,即使使用大量现有jQuery代码,采用这种方法也可以节省成本。我遗漏了什么吗?

意见型问题:

我的意见 除了HTML5之外,2.0中的大部分内容都是相同的。许多“普通的”JS函数已经被jQuery风格的标记所取代(这是我对代码的遵守),代码现在正在使用新实现的“标准”,从而使其与旧IE不兼容

但是,目前,名称间隔是相同的。所以我的想法是,我想说这一点都不坏,但是,就像以前版本的jQuery一样,不要期望HTML5浏览器(Chrome、FF、IE9+)中的外观在旧浏览器中看起来是一样的。你可能仍然想做一些检查,为可能的IE的细节与以前的版本。这真的不是什么新鲜事

通常情况下,一个空白的jQuery标记就可以了,不过您可能会注意到细微的差别。一个例子是IE7如何处理。在某些样式上设置动画,而不是IE9或10如何处理它们。正如我之前所说,这真的不是什么新鲜事

我个人设计了一个瞄准具,准备使用最新的标准,然后是“后版本”,以便与旧浏览器兼容。我这样做只是因为,无论我需要为什么添加“特定”的代码,与代码的其余部分相比,通常不会有太大的影响。而且,当我完成某个项目的开发时,我可能希望支持的旧项目之一可能不再是一个问题

如果有帮助的话,微软已经宣布,在未来五年左右的时间里,对Vist/IE9下的一切支持都将缓慢但稳定地下降。预计对旧版浏览器支持的需求会越来越少。(他们在白皮书中有一篇更好的文章,但在我的电子邮件中,不知道他们的白皮书列表在哪里)

我最近发现的另一个“gotchya”,Firefox正变得越来越像微软。我发现他们非常想把他们的“自己的标准”和相反的方向推向“我”的标准发展。这已经成为一个越来越重要的问题,因为我发现“在所有浏览器(甚至IE7!)中都可以使用,但FIREFOX除外!”我还没有足够的调查来了解为什么FF变化如此之大,但它们肯定会成为新的开发“IE头痛”问题

一个主要的例子是,标题中的CSS样式有任何不完整的地方,甚至是某些新FF引擎不喜欢的CSS3标准,都会毁掉整个页面。就在我脑子里,我遇到了一个问题(如果我没记错的话,那是几周前的事),那就是我在处理表行和
:after
。Firefox会在我的CSS中出现一行“BOOM!DOA!”没有JS会起作用,之后的样式也不会起作用。我把那一行改为使用第n个child和
+
的组合,突然之间,FF没有了更多的参数

我曾经很喜欢FF,但随着IE最终迎头赶上,微软宣布对“坏老鲤鱼”和Mozilla开关设备的支持率将下降(这也是我的观点),我将把
-Mozilla-
视为新的“幕后”浏览器,你必须对其做出“有条件”的声明


更新[6/5/13]
在收到这篇文章的新观点后,我花了一分钟的时间回顾了它,并认为我会与jQuery名称间隔共享我发现的另一个“gotchya”。我不知道为什么我以前没有提到它,除了它有点旧,我想我想大多数人都会知道。然而,由于我最近提供的其他帮助,我发现它相当“未知”

一个使用jQuery的老版本“gotchya”随1.7的发布而来。如果你查一下,你会发现,他们改变了一个主要的名字间隔,后来完全不推荐使用。
$.bind
$.delegate
$.live
的名称空间已替换为更易于跟随的
$.on
$.off
名称空间。这对于开发人员来说当然有点痛苦,因为它需要一个基于版本的
if
语句

同样,这是一个仅在jQuery版本1.7+更新版本和>1.7版本之间切换的问题

如果您选择在较新的jQuery和较旧的jQuery之间切换,那么我建议您将委派的函数包装在一个命名方法中。然后可以像调用
$(document).on(“事件”、“元素”、函数名)
一样调用它们。不要忘记命名函数的参数将是
事件
。此外,如果您错过了此问题的解决方案并需要它(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)
    */
}
if($.fn.on){
/*
*正在使用jQuery版本>=1.7
*必要时使用以下工具进行工作:
*$(文档).on(“事件”、“选择器”、回调)
*/
}
否则{
/*
*正在使用jQuery版本<1.7
*如有必要,使用以下方法进行工作:
*$(document.live(“事件”、“选择器”、回调)
*/
}


我从经验中可以看出,使用条件来控制使用中的jQuery的不同版本可能会导致开发地狱。否则,由于它是相同的API,除非在使用2.0时出现意外行为,否则我不会更改代码行。TDD有帮助。@Renan开发地狱不是我想要结束的地方;-)当您使用条件语句来控制不同版本的jQuery时,您注意到哪里出了问题了吗?有很多要点可以写一本关于它的书。我可以挑一个我最讨厌的,嗯
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)
    */
}