我最近有一个关于如何用jQuery正确检查元素是否存在的问题。我在这里找到了答案:
https://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-exists/
总而言之:
if ( $( "#myDiv" ).length ) {
// Do something
}
和我一起工作的一个人说,检查的正确方法应该是:
if ($( "#myDiv" ) && $( "#myDiv" ).length ) {
// Do something
}
有关系吗?我的意思是,从性能或延迟方面来看,它们的性能是相同的吗?
另外:
$( "#myDiv" ).show();
$( "#myDiv" ).hide();
$( "#myDiv" ).val('');
在这些类型的jQuery函数中,似乎不需要if
检查,因为如果#myDiv
不存在,它们不会引发错误,对吗?
不管怎样,我使用的是jQuery 1.6.4。
发布于 2016-08-04 03:05:42
这取决于您在if语句之后执行的操作。
你可以这样想。任何jquery选择器调用都会返回一个jquery对象,该对象基本上是一个用一组不同的方法扩展的数组。当您调用像$(".my-elements").show()
这样的东西时,它将遍历$(".my-elements")
返回的任何元素,并将.show()
应用于这些元素,然后返回相同的jquery对象,这就是jquery链的方式。
如果你只是在做可链接的事情,那么不,你不需要做If检查。因为所有后续方法都只是执行一个等价于for (var i=0; i<0; i++){ }
的循环,这意味着什么都不会发生。如果你有一个很大的链,并且你在一个需要非常高性能的大循环中运行它,你可能想要做If检查,但通常从性能的角度来看这并不重要。
然而,如果你正在做的事情会抛出一个错误或者给你一个不好的结果如果元素不存在,那么是的,使用If检查。例如
function addHeight() {
var height1 = $("#div1").height(),
height2 = $("#div2").height();
$("#otherDiv").css({ top: height1 + height2 });
}
如果div1
或div2
不存在,otherDiv
将把它的top设置为NaN
,这可能不是您想要的。在这种情况下,您需要验证div1
和div2
是否确实存在,但您仍然不必检查otherDiv
,因为如果它不存在,则什么也不会发生。
发布于 2016-08-05 20:28:26
更容易检查是否存在,如果我们想要从对象获得更多信息,我们将不会收到空对象错误。
if (!!$( "#myDiv" )) {
//do something
}
https://stackoverflow.com/questions/38751168
复制相似问题