你需要检查jQuery对象是否存在?

时间:2014-04-28 16:55:27

标签: javascript jquery

假设您有一个100页的网站,并且有一个ID为#unique-div的div,它只出现在page-5.html中,但不出现在其他99页中,而且是额外的简单的例子你有一个加载在所有页面上的JS文件,里面有这个:

var uniqueDiv = $('#unique-div');

uniqueDiv.addClass('random-class');

这会以任何可能的方式(例如,表现)产生任何负面影响吗?首先进行长度检查会更好吗?

var uniqueDiv = $('#unique-div');
if ( uniqueDiv.length ) {
    uniqueDiv.addClass('random-class');
}

如果是这样,为什么?

或者如果你链接这样的对象怎么样:

var uniqueDiv = $('#unique-div');

someVar.add(moreVars).add(uniqueDiv).addClass('random-class');

如果对象不存在,会发生什么?

我试过这个,但我一直想知道这个。

2 个答案:

答案 0 :(得分:3)

任何jQuery方法都有责任让#34;正确的"行为是否在调用它们的当前jQuery对象中有0个,1个或多个DOM对象。因此,只要您没有使用一些破解的jQuery插件方法,就不必在调用方法之前测试长度,这包括您使用链接的情况。

因此,在您的情况下,即使您不知道#unique-div是否确实存在,这将完全没问题:

$('#unique-div').addClass('random-class');

如果div不存在,那么.addClass()方法就什么都不做。

注意:某些检索.val()之类的值的方法被编码为仅对jQuery对象中的第一个DOM元素进行操作,您必须使用单个方法检查它们的编码方式。如果jQuery对象中没有DOM对象,则返回。例如,当jQuery对象中没有DOM对象时,.val()将返回undefined

答案 1 :(得分:0)

可能可以节省一些无限的性能,但它确实可以忽略不计。你的代码中可能会有很多时候你会在数组中进行for循环,确认长度可能为零。

JQuery对象总是有一些大小,我知道的所有方法(即addClass)都配备了空集,所以我没有看到跳过长度检查的任何问题。