在jQuery中,我已经知道如何通过使用特定选择器返回的jQuery对象的length属性来检查元素是否存在。
然而,在内部,这意味着jQuery首先抓取所有对象,然后获取长度。出于性能原因,我想看看是否只存在1个元素,我不需要抓住其余元素。
我该怎么做?
答案 0 :(得分:1)
请参阅相关问题:Optimize jQuery selector with :first
我已经分支了一个jsPerf测试,该测试将$("xxx:first")
与$("xxx").first()
进行比较,以确定jQuery是否已经过优化,可以在使用:first
时从匹配中提前纾困。它似乎没有那种优化:
http://jsperf.com/does-first-boost-your-selector/4
更新: .eq(0)
vs :eq(0)
的行为方式相同。
所以,你可能运气不好。似乎没有更有效的方式来选择/检查第一场比赛。当然,除非你有其他人注意到,否则你可以选择将你的选择器限制在类和id中,并且在我链接到的另一个问题中也已经注意到了。
答案 1 :(得分:1)
当我想检查ID未选择的元素是否存在,并且性能是一个问题时,我使用document.querySelector()
而不是jQuery。
与querySelectorAll()
不同,querySelector()
似乎只选择第一个匹配元素,提供了一种检查元素存在的有效方法。
实施例
if(document.querySelector('a')){
console.log('This document contains at least one anchor tag!');
}
您也可以通过从jquery对象中选择
来完成此操作var element = $('#super_special_element');
if(element.get(0).querySelector('a')){
console.log('Super special element contains at least one anchor tag!');
}
答案 2 :(得分:0)
我不确定这是否会改善性能,但您可以使用选择器过滤仅返回第一个匹配的元素。试试这个?
var exists = !$("selector:eq(0)").length == 0;
答案 3 :(得分:0)
如果元素有id,你可以使用document.getElementById(id),这是查找任何dom元素的最快方法。
在dom中,您可以使用getElementsByTagName按标记名称查找元素。
对于所有其他情况,请使用JQuery。
document.getElementById(id);
document.getElementById(id).getElementsByTagName(tag);