Check if a div exists with jquery
Possible Duplicate:
Is there an “exists” function for jQuery
是的,我知道这个要求很多。但是,这让我很困惑,因为谷歌的搜索结果显示了不同的方法(如下所列)
1 2 3 4 5 6 7 8 9 10 11 12 13
| $(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');
}
}); |
3中哪一个是检查DIV是否存在的正确方法?
编辑:看到人们不想从这三种不同的方法中学习什么是更好的方法,真是微不足道。这个问题实际上不是关于"如何检查DIV是否存在"的,而是关于哪个方法更好,如果有人能解释的话,为什么它更好?
- @它不是复制品,因为这是确定正确的方法,而不是如何。
- #Felix Kling-所有3个作品都在jfiddler jfiddle.net/k6aah/1上
- @德米蒂斯,是的,当然-但这是非常相似的-如果这个顶级答案是错误的,我想73694双眼睛中的一只可能已经发现了一个错误。
- @德米蒂斯,但最重要的答案似乎是一致的-一个迹象,他们比其他人更相似(至少对我来说)-:d/但无论如何-让蜂巢的头脑决定…
- @德门蒂斯:不,它不起作用:jsfiddle.net/k6aah/2
- @felix-你从html中删除了这个div,它是如何工作的?
- @demantic:它应该向您显示第三个方法仍然告诉您元素存在,尽管它不存在。你从中得出什么结论?不能用第三种方法测试元素的存在性。
- 关于你的编辑,没有客观上可测量的更好的方法。有些人喜欢显式测试(第二种方法),而另一些人喜欢隐式类型转换。如前所述,这是个人偏好。
- ¡;看这个答案!
第一个是最简洁的,我同意。前两个是相同的,但第一个只是稍微短一点,所以您可以节省字节。第三个很明显是错误的,因为这个条件总是计算为真,因为对象在这方面永远不会是空的或是不稳定的。
- 除非在上面的代码中,它们得到类似于$('divid')=null;lol的值。
- "第一个是最简洁的,我会同意的。…,所以你会节省字节",非常糟糕的心态。可维护代码>简明代码。
- @Niklasekman——我同意可维护性比精确的代码更重要,但我并没有泛化。我想我还不够清楚。在测试一个集合的长度的情况下,对于正非零的集合,在我看来,.length打败了.length > 0,所以这是一种双赢。不过,谢谢你指出这一点。
如果只是检查ID的存在性,则无需进入jquery,只需:
1 2 3
| if(document.getElementById("yourid") !== null)
{
} |
如果找不到,getElementById返回null。
参考文献。
但是,如果您计划稍后使用jquery对象,我建议:
1 2 3 4 5 6 7 8 9
| $(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/question s/801032/null-object-in-javascript中有一个关于空对象的有趣问题。
- 如果您使用jquery,我看不到使用getElementById的任何理由,除非您确实需要性能改进(例如,它在一个长循环中或是其他什么东西,尽管我不知道这将如何出现,您需要反复运行数千个select查询)。在大量的javascript过程中,它更加冗长,真正增加了更多的空间,降低了可读性。
- 是的,我同意您的观点@jamietre我主要使用jquery版本,因为我可能在其他地方使用jq对象。但是,如果您知道总是要使用一个ID参数,而您所做的一切都是检查元素的存在性,那么拥有jQuery对象并没有多大帮助(因为它只是包装getElementByID)。我认为另一个性能benifit(如果JQ只需要检查存在性——可能非常罕见)甚至根本不需要下载库。你的权利,getElementByID大部分时间都是不必要的冗长,但最好知道一个替代方案。
- 例如,GetElementByID不适用于类名,而$('.ClassName').Length则适用。
- 没错,皮耶罗,我同意。"document.queryselectorall()"caniuse.com/queryselector允许您使用类名等,但对于较旧的浏览器不允许。jquery抽象了这一点,这样您就不必担心它(实际上,如果可用的话,在后台使用queryselectorall)。
- 使用jquery检查DIV是否等于空对我不起作用。我更喜欢你的方法。谢谢
- var$mydiv选项也适用于空的div。所以,给我一个解决办法。
正如Karim79所提到的,第一个是最简洁的。但是,我可以说第二个更容易理解,因为对于一些javascript/jquery程序员来说,在if语句中,非零/假值被评估为true是不明显/不知道的。因此,第三种方法是不正确的。
- 我认为大多数JavaScript开发人员都知道非零正整数被认为是"真实的",但这只是我的观点:)
- 我认为所有的JavaScript开发人员都应该知道这一点。但是现在很多人几乎只在"jquery"中开发,缺乏基本的javascript基础。但这是一个完全不同的讨论:p
- 不同意。测试真实性是非常基本的JavaScript。如果你更熟悉另一种没有这个概念的语言,这可能看起来很有趣,但这是非常常见的,一旦你习惯了它,就会提高可读性。