【问题标题】:Check if a div exists with jquery [duplicate]使用jquery检查div是否存在[重复]
【发布时间】:2011-10-17 11:16:40
【问题描述】:

是的,我知道这个问题被问了很多。 但是,这让我很困惑,因为谷歌上的搜索结果显示了不同的方法(如下所列)

$(document).ready(function() {
    if ($('#DivID').length){
        alert('Found with Length');
    }

    if ($('#DivID').length > 0 ) {
        alert('Found with Length bigger then Zero');
    }

    if ($('#DivID') != null ) {
        alert('Found with Not Null');
    }
});

三种方法中哪一种是检查 div 是否存在的正确方法?

编辑: 看到人们不想从三种不同的方法中学习什么是更好的方法,这是一个遗憾。这个问题实际上不是关于“如何检查 div 是否存在”,而是关于哪种方法更好,如果有人可以解释,为什么它更好?

【问题讨论】:

  • @miku - 它不是重复的,因为这是为了确定正确的方法,而不是如何。
  • #Felix kling - 所有 3 个作品都在 jsfiddler jsfiddle.net/k6aAh/1
  • @Dementic,是的,当然 - 但它非常相似 - 如果最上面的答案是错误的,我猜 73,694 对眼睛中的一只可能已经发现了错误。
  • @Dementic,但最重要的答案似乎趋于一致 - 这表明它们比其他人更相似(至少对我而言) - :D / 但无论如何 - 让蜂巢思维决定......
  • @Dementic:它应该告诉你第三种方法仍然告诉你元素存在,尽管它不存在。你从中得出什么结论?您无法使用第三种方法测试元素的存在。

标签: jquery html exists


【解决方案1】:

如果你只是检查一个ID是否存在,则不需要进入jQuery,你可以简单地:

if(document.getElementById("yourid") !== null)
{
}

如果找不到getElementById,则返回null

Reference.

如果您打算稍后使用 jQuery 对象,我建议:

$(document).ready(function() {
    var $myDiv = $('#DivID');

    if ( $myDiv.length){
        //you can now reuse  $myDiv here, without having to select it again.
    }


});

选择器总是返回一个 jQuery 对象,所以不需要检查null(如果有需要检查的边缘情况,我会感兴趣null - 但我认为没有)。

如果选择器没有找到任何东西,那么length === 0 是“falsy”(当转换为 bool 时它的 false)。因此,如果它发现了什么,那么它应该是“真实的”——所以你不需要检查 > 0。只是因为它是“真实的”

【讨论】:

  • 如果你想伤脑筋,有一个关于JS中空对象的有趣问题stackoverflow.com/questions/801032/null-object-in-javascript
  • 如果你使用 jQuery,我看不出有任何理由使用getElementById,除非你真的需要性能改进(例如,它在一个长循环中,虽然我想不出关于这将如何出现,您需要一遍又一遍地运行数千个选择查询)。它只是更加冗长,在大量 javascript 的过程中确实增加了更多的空间和更少的可读性。
  • 没错,我同意你的观点@jamietre 我主要使用 jQuery 版本,因为我可能在其他地方使用 jq 对象。但是,如果您知道您总是要使用 ID 参数并且您所做的只是检查元素的存在,那么拥有 jQuery 对象并没有多大帮助(因为它只是围绕 getElementById 进行包装)。我想其他性能优势(如果检查存在是 jq 的唯一需要 - 可能非常罕见)甚至根本不需要下载库。你的权利,getElementById 大多数时候是不必要的冗长,但知道一个替代方案是件好事。
  • 例如,getElementById 不适用于类名,而 $('.classname').length 可以。
  • 这是真的@Piero 我同意。 "document.queryselectorAll()" caniuse.com/querySelector 允许您使用类名等,但不适用于旧版浏览器。 jQuery 对其进行了抽象,因此您无需担心(事实上,如果可用,则在后台使用 queryselectorAll)。
【解决方案2】:

正如 karim79 所说,第一个是最简洁的。但是我可以争辩说第二个更容易理解,因为某些 Javascript/jQuery 程序员并不明显/不知道在 if 语句中将非零/假值评估为 true。正因为如此,第三种方法是不正确的。

【讨论】:

  • 我认为大多数 JavaScript 开发人员都知道非零正整数被认为是“真实的”,但这只是我的观点 :)
  • 我认为所有 Javascript 开发人员都应该知道这一点。但是现在很多人几乎只使用“jQuery”开发并且缺乏基本的 Javascript 基础。但这是一个完全不同的讨论:P
  • 不同意。真实性测试是非常基础的 javascript。如果您更熟悉另一种没有此概念的语言,这可能看起来很有趣,但它非常常见,一旦您习惯了它就会提高可读性。
【解决方案3】:

第一个是最简洁的,我会去的。前两个是相同的,但第一个只是稍微短一点,所以你会节省字节。第三个是完全错误的,因为该条件将始终评估为真,因为对象将永远在这方面为空或假。

【讨论】:

  • 除非在上面的代码中他们得到类似 $('#DivID') = null;大声笑)
  • “第一个是最简洁的,我会用那个。{...},所以你会节省字节”,非常糟糕的心态。可维护的代码 > 简洁的代码。
  • @NiklasEkman - 我同意可维护性比精确的代码更重要,但我并没有一概而论。我想我说得不够清楚。在测试集合的 长度 的情况下,对于非零正数,在我看来 .length 击败了 .length > 0,所以这是一种双赢。不过,感谢您指出这一点。
猜你喜欢
  • 2011-03-18
  • 1970-01-01
  • 2014-02-17
  • 2012-12-06
  • 2015-09-13
  • 2015-06-24
  • 2015-03-08
  • 2011-06-03
相关资源
最近更新 更多