我注意到从jQuery版本1.9升级到版本1.11后,slideUp
,slideDown
和slideToggle
等方法的行为在应用于非块元素时发生了变化(即,span
),其中指定了css display
值。在以前的版本中,例如v1.9,display
值将被设置(在动画完成之后)到我们在CSS定义中指定的任何内容。在版本1.11和2.1中,display
值不以这种方式受到尊重(至少不适用于非块元素)。
这是jQuery 1.11和2.1中的新错误吗?我看到在旧版本的jQuery中,其他人报告了类似的问题,例如this和this。这些问题似乎已被报道为固定的,而且根据我们使用jQuery 1.9的经验,似乎就是这种情况。但似乎它在1.11和2.1中再次被打破。这是一个简单的可重现的例子:
HTML:
<span class="b">block</span> <!-- notice this is not a block-level element... -->
<a href="#" class="toggle">toggle it</a>
CSS:
.b {
display:block; /* ... but I need it to display like a block-level element */
background:red;
}
使用Javascript:
var isExpanded = true;
$(".toggle").bind("click", function(){
if(isExpanded) {
$(".b").slideUp();
isExpanded = false;
}
else {
$(".b").slideDown();
isExpanded = true;
}
});
在这个使用jQuery 1.9的jsFiddle example中查看它。
这会在切换打开时产生预期结果:
不幸的是,jQuery版本1.11(或2.1)不尊重我们的display
值,而是将其设置为inline-block
:
这可以在this jsFiddle example中看到,其中唯一改变的是jQuery版本。
我是否错过了jQuery的声明,告诉我们这个新版本的行为会有所不同? These release notes似乎没有这么说,表明这次升级......
“你的代码不应该破坏,它应该运行得更快一点。”
注意:我意识到将这个简单示例中的span
更改为div
可能会解决此问题,但有时我们需要使用给定块的span
级别样式(即,您不能在div
内嵌套span
),并且我们有一个包含许多此类案例的大型生产应用程序。