随着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代码也会采用这种方法。我错过了什么吗?
答案 0 :(得分:1)
意见类型问题:
2.0中的大多数内容与HTML5异常相同。许多“vanilla”JS函数已被jQuery样式标记所取代(这仅仅是我对代码的遵守),并且代码现在正在使用新实现的“标准”,从而使它与旧的IE不兼容。
但是,目前,名称间距是相同的。所以我的想法是,我会说它一点也不差,但是,就像以前版本的jQuery一样,不要指望HTML5浏览器(Chrome,FF,IE9 +)中的一种看起来与旧版本相同浏览器。 U可能仍然希望对可能的IE细节进行一些检查,就像以前的版本一样。这真的不是什么新鲜事。
通常情况下,覆盖jQuery标记会很好,但是你可能会注意到差别。例如,IE 7如何在某些样式上处理.animate,而不是IE 9或10处理它们。正如我之前所说,这真的不是什么新鲜事。
我个人设计了一个可以使用最新标准的视线,然后是“返回版本”以与旧版浏览器兼容。我这样做只是因为,无论我需要抛出一个“特定”,通常与其余代码相比并不多。此外,当我完成一些事情的开发时,我可能期望支持的旧版本之一可能不再是一个问题。
如果有任何帮助,MS已经宣布在未来五年左右的时间内对Vist / IE9下的所有内容进行缓慢而稳定的支持。期望看到越来越少的旧浏览器支持需求。 http://support.microsoft.com/gp/lifeadditionalproducts(白皮书中有一篇更好的文章,但它在我的电子邮件中,不确定他们的白皮书列表在哪里上线)
另一个“gotchya”我最近发现,Firefox变得更像微软。我发现他们非常想要纳入他们的“自己的标准”,并从“我”考虑标准开发的方向向相反的方向发展。这已成为越来越多的问题,因为我发现“在所有浏览器中工作(甚至IE7!),但是FIREFOX!”我没有足够的调查,看看为什么FF变化如此之大,但他们肯定成为新的“IE头痛”的发展。
一个主要的例子,标题中的CSS样式具有任何不完整性,甚至新的FF引擎不喜欢的某些CSS3标准将杀死整个页面。就在我的脑海中,我遇到的一个问题(如果我正确地记得这个问题,就在几个星期前)是我用表行和:after
做的事情。 Firefox会在我的CSS和“BOOM!DOA!”中找到这一行。没有JS会起作用,在那之后没有样式可行。我改变了这一行,使用了nth-child
和+
的组合,突然间没有FF的争论了。
我曾经喜欢FF,但随着IE终于迎头赶上,MS宣布支持“糟糕的老鲤鱼”和Mozilla切换落后(我再次认为),我会期待-mozilla-
作为新的“幕后”浏览器,您必须为其制作“条件”声明。
更新[6/5/13]
在收到这篇文章的新观点后,我花了一分钟时间对它进行了审核,并认为我将与jQuery Name-Spacing共享另一个“gotchya”。我不知道为什么我之前没有提到它,除了它有点旧,我想我认为大多数人都会知道。但是,由于我最近给出的其他帮助,我发现它非常“未知”。
一个使用jQuery的旧版“gotchya”附带1.7版本。如果你查一下,你会看到,他们改变了一个主要的名称间距,后来被完全弃用了。 $.bind
,$.delegate
和$.live
的名称空格被替换为更容易遵循$.on
和$.off
的名称空间。对于开发人员而言,这当然是一个很大的痛苦,因为它需要基于版本的if
语句。
同样,这只是用于在1.7 +更新版本和&gt;之间切换jQuery版本的问题。 1.7!
如果您选择在新旧jQuery之间切换,那么我建议您将委派的函数包装在命名方法中。然后可以像$(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)
*/
}