我发现这:
var $colSelect = $('#stuff').find('.things');
$($colSelect).find('img, input, select').addClass("foo");
则慢于此:
var $colSelect = $('#stuff').find('.things');
$($colSelect).find('img').addClass("foo");
$($colSelect).find('input').addClass("foo");
$($colSelect).find('select').addClass("foo");
谁能帮我理解为什么会这样吗?我特别注意到IE8的性能提高。
最佳答案
我的猜测是,对于第一个选择器,jQuery必须解析该选择器,为每个选择器调用JavaScript的getElementsByTagName
并加入结果(甚至可能按其在DOM中的位置顺序对其进行排序)。
第二种情况是对JavaScript的getElementsByTagName
的直接调用,而无需其他操作。
该页面比较了表演:http://jsperf.com/jquery-selector-performance-problems