我只是注意到向选择器添加上下文比精炼选择器快得多.
$('li',$('#bar')).append('bla');
比以前快两倍:
$('#bar li').append('bla');
这一般是正确的吗?
我正在读一本书,他们展示了几个如何在DOM上选择元素的例子,但他们建议总是在选择器上使用Jquery trasversing方法,例如,如果你在div中有一个列表而不是使用
$("#myList > li")
Run Code Online (Sandbox Code Playgroud)
你应该用
$("#myList").children("li")
Run Code Online (Sandbox Code Playgroud)
大多数时候我使用第一个而不是后者,作者说第二个是首选的,效率更高,但他没有解决原因,有人可以解释这背后的原因吗?
我正在尝试优化一些遍历和隐藏/显示一些无序列表的基本jquery脚本.
这是jsperf中的测试用例:http://jsperf.com/caching-vs-no-caching
我在两个浏览器中运行测试:Chrome和IE7/IE8,令人惊讶的是缓存的情况比较慢 - 稍微但仍然如此.
未经优化的版本是:
(function( $ ) {
$.fn.menuManipulation = function() {
this.parents().show();
};
})( jQuery );
$('.menu-vertical li.selected').menuManipulation();
$(".menu-vertical li.selected > ul.static").show();
$('li.static').has('ul').addClass("with-child");
Run Code Online (Sandbox Code Playgroud)
和缓存的:
(function($) {
$.fn.menuManipulation = function() {
this.parents().show();
};
})(jQuery);
var menu = $('.menu-vertical');
menu.find('li.selected').menuManipulation();
menu.find('li.selected > ul.static').show();
menu.find('li.static').has('ul').addClass("with-child");
Run Code Online (Sandbox Code Playgroud)
有人可以解释我做错了什么,为什么缓存版本似乎更慢?