问题是您试图隐藏和显示内联元素。jQuery 效果仅适用于块类型元素。jQuery 效果操纵内联元素样式,这就是该版本有效而类版本无效的原因。
如果您考虑一下,块类型元素是矩形。它们很容易动画增长和缩小,因为您只需动画它们的高度和/或宽度。
内联元素不一定是矩形,这就是 jQuery 效果大多不起作用的原因。给你举个例子:
<p>Inside paragraph <span class="foo">This is a test</span> contains text.</p>
<input type="button" id="bar" value="Toggle">
跑:
$(function() {
$("#bar").click(function() {
$("span.foo").toggle();
});
});
第一次单击将隐藏它。第二个将把它变成一个块(因为它不再包含在段落中)。这就是我所说的 jQuery 效果不能真正与内联元素一起使用的意思。
在内部,jQuery 效果通过结合动画和在display: none
和之间切换来工作display: block
。这意味着jQuery 效果也不适用于表格单元格。为什么?他们不是display: block
,他们是有效的display: table-cell
。自己尝试一下,看看在你toggle()
的表格单元格几次之后会发生什么。
那么解决方案是什么?对于内联内容,最简单的解决方案就是使用类:
hidden { display: none; }
和
$("span.hideme").toggleClass("hidden");
这没有动画效果。您可以自己添加它,但我不是 100% 可以很好地animate()
使用内联元素。
或者,如果您的内容可以成为一个块,请将其设置为一个块,所有这些问题都会消失。在您的情况下,请使用 a<div>
而不是 a<span>
或添加display: block
到<span>
.