一、选择器机能优化发起
1. 老是从#id选择器来担任
这是jQuery选择器的一条黄金法例。jQuery选择一个元素最快的要领就是用ID来选择了。
$('#content').hide();可能从ID选择器担任来选择多个元素:
$('#content p').hide();2. 在class前面利用tag
jQuery中第二快的选择器就是tag选择器(如$(‘head’)),因为它和直接来自于原生的Javascript要领getElementByTagName()。所以最好老是用tag来修饰class(而且不要忘了就近的ID)
var receiveNewsletter = $('#nslForm input.on');jQuery中class选择器是最慢的,因为在IE欣赏器下它会遍历所有的DOM节点。只管制止利用class选择器。也不要用tag来修饰ID。下面的例子会遍历所有的div元素来查找id为'content’的谁人节点:
var content = $('div#content');// 很是慢,不要利用
用ID来修饰ID也是多此一举:
var traffic_light = $('#content #traffic_light');// 很是慢,不要利用
3. 利用子查询
将父工具缓存起来以备未来的利用
var header = $('#header');var menu = header.find('.menu');
// 可能
var menu = $('.menu', header);
4. 优化选择器以合用Sizzle的“从右至左”模子
自版本1.3之后,jQuery回收了Sizzle库,与之前的版本在选择器引擎上的表示形式有很大的差异。它用“从左至右”的模子取代了“从右至左”的模子。确保最右的选择器详细些,而左边的选择器选择范畴较宽泛些:
var linkContacts = $('.contact-links div.side-wrapper');
而不要利用
var linkContacts = $('a.contact-links .side-wrapper');
5. 回收find(),而不利用上下文查找
.find()函数简直快些。可是假如一个页面有很多DOM节点时,需要往返查找时,大概需要更多时间:
var divs = $('.testdiv', '#pageBody');// 2353 on Firebug 3.6
var divs = $('#pageBody').find('.testdiv');
// 2324 on Firebug 3.6 - The best time
var divs = $('#pageBody .testdiv');
// 2469 on Firebug 3.6
6. 操作强大的链式操纵
回收jQuery的链式操纵比缓存选择器更有效:
$('li.menu-item').click(function () {alert('test click');}).css('display', 'block')
.css('color', 'red')
fadeTo(2, 0.7);
记着,永远不要让沟通的选择器在你的代码里呈现多次:
(1)为了区分普通的JavaScript工具和jQuery工具,可以在变量首字母前加上$标记。
7. 编写属于你的选择器
假如你常常在代码中利用选择器,那么扩展jQuery的$.expr[':']工具吧,编写你本身的选择器。下面的例子中,我建设了一个abovethefold选择器,用来选择不行见的元素:
$.extend($.expr[':'], {abovethefold: function(el) {
return $(el).offset().top < $(window).scrollTop() + $(window).height();
}
});
var nonVisibleElements = $('div:abovethefold'); // 选择元素