我发现这:

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

10-07 21:12