iam*_*eed 3 jquery jquery-selectors
哪组选择器效率更高?
$('#parent_element span.class1').do_something1();
$('#parent_element span.class2').do_something2();
$('#parent_element span.class3').do_something3();
$('#parent_element span.class4').do_something4();
Run Code Online (Sandbox Code Playgroud)
$parent_element = $('#parent_element');
$parent_element.find('span.class1').do_something1();
$parent_element.find('span.class2').do_something2();
$parent_element.find('span.class3').do_something3();
$parent_element.find('span.class4').do_something4();
Run Code Online (Sandbox Code Playgroud)
我的猜测是#2更有效,因为它开始find()专注于父元素与整个DOM的搜索.这是真的?
如果是这样,需要多少次调用该父元素才能使其比#1更有效?
谢谢!
与任何类似的事情一样,如果您想要真正的答案,则必须使用 jsperf 之类的工具进行测试。测试表明,第二个比第一个快得多。
如果它们都是相同的方法调用,或者您可以在一个.each(fn)方法中处理每个方法,则可以像这样将它们全部组合在一起,并且选择器操作会明显更快:
$('#parent_element').find('span.class1, span.class2, span.class3, span.class4').each(fn);
Run Code Online (Sandbox Code Playgroud)

你可以在这里自己运行:http : //jsperf.com/selector-options。你的第一个选择是橙色。你的第二个选择是蓝色。组合选择器是红色的。缓存的父级大约快 30-80%。如果它们都可以组合成一个选择器,速度会快很多倍。