这些过程中哪一个是资源密集型的?
var content = $('.kb-content');
content.each(function () {
if ($(this).data('parent-id') === targetId) {
$(this).toggleClass('hidden');
}
});
或者
$('.kb-content[data-parent-id="' + targetId +'"]').toggleClass('hidden');
jQuery 使用 Sizzle 库来选择元素。这个库解析传递的字符串,对于简单的情况,使用标准函数
get*By*,或者,如果支持,使用querySelectorAll.我们可以考虑在第一种和第二种情况下究竟发生了什么。
第一种情况:
$('.kb-content');- 选择一个类的所有元素kb-contentcontent.each(function () {- 通过每个元素if ($(this).data('parent-id') === targetId) {- 创建一个jQuery对象,访问data,比较一个参数$(this).toggleClass('hidden');- jQuery 对象创建、类更改第二种情况:
$('.kb-content[data-parent-id="' + targetId +'"]')- 选择具有kb-content其属性的类的元素data-parent-id- 具有相应的值.toggleClass('hidden');- 遍历每个元素并更改类至少可以看出两个区别:
因此,如果在具有
kb-content所需属性的一类元素的元素中,元素会少得多,那么按属性选择的选项会更快,因为这样的元素会更少。此外,速度受对象的多次创建影响
jQuery。确认上述推理的测试示例。