jQuery优化:检查一个元素是否存在,速度快?

时间:2011-06-16 18:43:07

标签: jquery

在jQuery中,我已经知道如何通过使用特定选择器返回的jQuery对象的length属性来检查元素是否存在。

然而,在内部,这意味着jQuery首先抓取所有对象,然后获取长度。出于性能原因,我想看看是否只存在1个元素,我不需要抓住其余元素。

我该怎么做?

4 个答案:

答案 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);
相关问题