假设您有一个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');
如果对象不存在,会发生什么?
我试过这个,但我一直想知道这个。
答案 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)都配备了空集,所以我没有看到跳过长度检查的任何问题。