2012-08-10 131 views
2

我的页面有一个提示框,显示在没有条目显示。当一个新的输入是通过AJAX加入我删除这个元素用一个简单的:在删除元素之前检查元素的存在是否更好?

$('#empty-alert').remove(); 

我在想:当我添加以下项我只需再次不管调用此方法的元素存在与否。首先检查存在是否更好,如果存在,请致电remove()?像:

if($('#empty-alert').length){ 
    $('#empty-alert').remove(); 
} 

或者是当元素确实存在,并第一个想法就是已经检查存在,在一个调用中删除这只是额外的工作?

+0

如果你打算做第二个选项,那么你应该把'$('#空警戒的结果')'变成一个变量,然后用它来检查长度并删除。 – row1 2012-08-10 08:06:08

回答

8

作为参考,从我的理解相当宽松的条件:

$()选择在jQuery的总是返回一个jQuery集合。如果没有匹配元素,则集合为空。

当你调用一个函数,如remove()上一个jQuery集合,它实际上通过收集迭代在它的每个元素上执行的操作。如果集合是空的,它将永远不会迭代,因此在这种情况下从不会调用任何元素上的remove()

例如,使用这种情况下:

$('#empty-alert')或者返回的["#empty-alert jQuery object"][](空数组)的集合;

调用一个.remove()被有效做这样的事情在幕后:

//jqCollection is one of the arrays previously mentioned 

jqCollection.each(function(){ 
    this.remove(); //'this' is a single jQuery object from the jqcollection 
}); 
+0

谢谢你的解释和奖金点幕后看看:)听起来就像是额外的检查的确会 - 我想 - 火存在的不必要的查找。 – 2012-08-10 10:49:45

2

或者当元素确实存在并且第一个想法已经检查存在并在一次调用中删除时,这只是额外的工作吗?

在非现有元素上调用remove()不会导致错误,因此您可以在没有元素存在检查的情况下使用它。

0

阅读文档http://api.jquery.com/remove/如果你需要做这个检查,他们会告诉你这一点。

+0

谢谢,但我不想知道我是否需要*检查,如果它是有用的或只是额外的工作,则更多。 – 2012-08-10 10:51:23