在jQuery中,是否可以给empty()方法一个持续时间,这样对象在一段时间内淡化为空(例如500毫秒)?
以下是当前代码:
$('#object_to_be_emptied').empty();
答案 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()
});