HTML代码
<div id="foo">
<h1>foo</h1>
<p>Pellentesque habitant morbi tristique.</p>
</div>
<div id="bar">
<h1>bar</h1>
</div>
jQuery代码
$('#bar').click(function () {
$('#foo p').hide('slow').appendTo('#bar').show('slow');
})
预期结果
点击#bar时
p
#foo
元素
p
追加到#bar
p
,现在是#bar
实际结果
p
追加到#bar
p
#foo
元素
p
,现在是#bar
问题
答案 0 :(得分:8)
为确保您在隐藏或显示等效果后执行某些操作,请使用回调。 http://docs.jquery.com/Effects/show#speedcallback
添加:
Vincent是对的,执行实际上是
你看到的是效果的结果
答案 1 :(得分:4)
预期结果是正确的。观察到的行为可能是hide('slow')的结果,它以异步运行。因此它会在下一个动作执行时运行。所以看起来似乎首先将p附加到#bar。你可以尝试hide()而不要慢,看看是否会产生影响。
答案 2 :(得分:3)
如果您想在完成下一步之前等到每个动画完成,请使用the documentation中详述的动画回调:
$('#bar').click(function () {
$('#foo p').hide('slow', function(){
$(this).appendTo('#bar').show('slow');
});
});
答案 3 :(得分:1)
非常确定它是按照你调用它的顺序执行的,它可能会启动隐藏部分,一瞬间它会附加到另一个元素但动画部分已经开始,它需要的时间超过一毫秒,因为你将它设置为'慢',它的不透明度从1跳到0,从1到.9到.8毫秒。
$.fn.hide = function() { alert('hiding'); return this; };
$.fn.appendTo = function() { alert('appending To') }
$('body').hide().appendTo('html')
答案 4 :(得分:1)
show()
和hide()
实际上是动画效果,但是当没有参数传递时,它们会使用“即时”持续时间。但是,由于它们是作为动画实现的,这意味着它们不会与功能链同步执行。因此,您真正应该使用的是hide()
调用的回调,以触发调用append()
然后调用show()
的回调函数。
答案 5 :(得分:1)
隐藏是异步的。如果你想等待它完成,你需要将你想要运行的所有代码放入一个回调函数中,并将其作为参数隐藏。
答案 6 :(得分:0)
如果你想在“Sixten Otto”这样的show hide之后运行其他方法,你必须使用回调。 show hide的动画不会等待append方法执行。它使用setInterval启动一个单独的线程,同时调用其他代码。所以你得到的结果并不出乎意料。