首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我真的需要用jQuery检查元素是否存在吗?

我真的需要用jQuery检查元素是否存在吗?
EN

Stack Overflow用户
提问于 2016-08-04 02:31:13
回答 2查看 14.1K关注 0票数 64

我最近有一个关于如何用jQuery正确检查元素是否存在的问题。我在这里找到了答案:

https://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-exists/

总而言之:

代码语言:javascript
复制
if ( $( "#myDiv" ).length ) {
    // Do something
}

和我一起工作的一个人说,检查的正确方法应该是:

代码语言:javascript
复制
if ($( "#myDiv" ) && $( "#myDiv" ).length ) {
    // Do something
}

有关系吗?我的意思是,从性能或延迟方面来看,它们的性能是相同的吗?

另外:

代码语言:javascript
复制
$( "#myDiv" ).show();
$( "#myDiv" ).hide();
$( "#myDiv" ).val('');

在这些类型的jQuery函数中,似乎不需要if检查,因为如果#myDiv不存在,它们不会引发错误,对吗?

不管怎样,我使用的是jQuery 1.6.4。

EN

回答 2

Stack Overflow用户

发布于 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检查。例如

代码语言:javascript
复制
function addHeight() {
  var height1 = $("#div1").height(),
      height2 = $("#div2").height();

  $("#otherDiv").css({ top: height1 + height2 });
}

如果div1div2不存在,otherDiv将把它的top设置为NaN,这可能不是您想要的。在这种情况下,您需要验证div1div2是否确实存在,但您仍然不必检查otherDiv,因为如果它不存在,则什么也不会发生。

票数 3
EN

Stack Overflow用户

发布于 2016-08-05 20:28:26

更容易检查是否存在,如果我们想要从对象获得更多信息,我们将不会收到空对象错误。

代码语言:javascript
复制
if (!!$( "#myDiv" )) {
    //do something
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38751168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档