jQuery:empty()方法可以给持续时间吗?

时间:2011-06-07 18:09:28

标签: jquery

在jQuery中,是否可以给empty()方法一个持续时间,这样对象在一段时间内淡化为空(例如500毫秒)?

以下是当前代码:

$('#object_to_be_emptied').empty();

3 个答案:

答案 0 :(得分:19)

没有。将内容淡出,然后在淡入淡出完成时将其清空。

$('#object_to_be_emptied').children().fadeOut(500, function() {
    $('#object_to_be_emptied').empty();
});

不幸的是,此代码调用empty的次数与#object_to_be_emptied下的元素相同。如果您使用的是jQuery> 1.6,你可以通过$.Deferred动画支持来解决这个问题:

$('#object_to_be_emptied').children().fadeOut(500).promise().then(function() {
    $('#object_to_be_emptied').empty();
});

答案 1 :(得分:3)

其他两个答案建议使用$('#object_to_be_emptied').children().fadeOut(),但使用.children()实际上是一个坏主意,因为这会导致动画应用于孩子的每个包含元素中的元素(查杀性能),因此对object_to_be_emptied中的每个元素执行一次动画完成回调。不仅仅是几个元素,这将成为一个真正的问题。

相反,只需将动画应用于包含元素,记住在重新填充它之后调用.fadeIn()并想再次显示它。

$('#object_to_be_emptied').fadeOut(500, function() {
    $(this).empty();
});

另请注意,我在回调函数中使用了this - jQuery将this设置为DOM元素,它是回调函数的目标;在这种情况下,object_to_be_emptied。使用this可以节省一些输入内容,并且可以更轻松地更改代码。

答案 2 :(得分:1)

你可能正在寻找类似的东西:

$('#object_to_be_emptied').children().fadeOut(500,function(){
  $('#object_to_be_emptied').empty()
});