jQuery最简单的检查元素是否存在的方法

9
我总是用以下方式使用jQuery检查元素:

我总是用以下方式使用jQuery检查元素:

var x = $("div.myElement");
if (x.length > 0) {
    x.show();
}

但我真的不喜欢那个if。有没有更简单的方法?

2个回答

15

这个答案直接来自于jQuery FAQ,并且非常值得记住:在发布问题之前先搜索一下,jQuery文档既简单易懂又完备。

使用你的选择器返回的jQuery集合的length属性:

if ($("div.myElement").length)
    $("div.myElement").show();

另一个重要的事情也在常见问题解答中提到:并不总是需要测试元素是否存在。

如果您只编写$("div.myElement").show(),则仅当元素存在时才会显示该元素(确保是这样,对吗?),如果不存在,则不会发生任何事情(也不会出现错误)。jQuery方法被编写为在选择器结果为空时不引发错误。


你说得对,我真的应该在查找文档之前先搜索一下...抱歉。但是如果我的选择器结果为空,我怎么能确定某个方法不会引发错误呢? - user776290
1
好的回答,然而这个测试是出于非常重要的原因而添加的:如果你不在空集合上执行操作,将会有性能提升。证据请参见:http://jsperf.com/jquery-check-for-null-selector-or-just-perform-method2 - Adam Terlson
说实话,我不确定所有的jQuery方法是否都是这样的行为。但我有强烈的感觉它是普遍的。至少在调用其他方法之前,如showhideanimatesiblingsfind等,我从未遇到过错误。 - Erick Petrucelli
1
@Adam,测试不错!结果有点出乎意料:在调用方法之前进行检查总是比调用并等待其在其中执行检查更有效率。虽然性能提升不是很大,但我会记住这一点,并在以后的工作中应用。非常好! - Erick Petrucelli

0
你可以这样做:
if ($("div.myElement").is('*')) {
  ...do some stuff...
}

或者:

if ( $("div.myElement")[0] ) {
  ...do some stuff...
}

该问题已经在这里这里得到了解答。


请问一下,.is("*") 这个是什么意思?它的性能如何? - user776290

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接