var myLength = myArray.length;
for (var i = 0; i < myLength; i++) {
// do stuff
}
// 这样性能很差
$.each(myArray, function(i, item) {
var newListItem = '<li>' + item + '</li>';
$('#ballers').append(newListItem);
});
// 这样性能较好
var frag = document.createDocumentFragment();
$.each(myArray, function(i, item) {
var newListItem = '<li>' + item + '</li>';
frag.appendChild(newListItem);
});
$('#ballers')[0].appendChild(frag);
// 这样也很好
var myHtml = '';
$.each(myArray, function(i, item) {
html += '<li>' + item + '</li>';
});
$('#ballers').html(myHtml);
// 丑
if ($eventfade.data('currently') != 'showing') {
$eventfade.stop();
}
if ($eventhover.data('currently') != 'showing') {
$eventhover.stop();
}
if ($spans.data('currently') != 'showing') {
$spans.stop();
}
// 漂亮!!
var $elems = [$eventfade, $eventhover, $spans];
$.each($elems, function(i,elem) {
if (elem.data('currently') != 'showing') {
elem.stop();
}
});
// 不好
$(document).ready(function() {
$('#magic').click(function(e) {
$('#yayeffects').slideUp(function() {
// ...
});
});
$('#happiness').load(url + ' #unicorns', function() {
// ...
});
});
// 好
var PI = {
onReady : function() {
$('#magic').click(PI.candyMtn);
$('#happiness').load(PI.url + ' #unicorns', PI.unicornCb);
},
candyMtn : function(e) {
$('#yayeffects').slideUp(PI.slideCb);
},
slideCb : function() { ... },
unicornCb : function() { ... }
};
$(document).ready(PI.onReady);
// 快
$('#container div.robotarm');
// 相当快
$('#container').find('div.robotarm');
使用 $.fn.find 的方式更快,因为在 $.fn.find 之前的选择器并没有使用 jQuery 自带的 Sizzle 选择器引擎,而是使用了浏览器 document.getElementById() 方法,浏览器原生的方法自然更快。
使用组合选择器时,尽可能使右端更明确,而左端不尽量不明确:
// 未优化
$('div.data .gonzalez');
// 已优化
$('.data td.gonzalez');
$('.data table.attendees td.gonzalez');
// 在不影响结果的情况下尽量删掉中间多余部分
$('.data td.gonzalez');
$('.buttons > *'); // 极慢
$('.buttons').children(); // 好多了
$('.gender :radio'); // 隐式地使用通配符,慢
$('.gender *:radio'); // 显式地使用通配符,同上,慢
$('.gender input:radio'); // 嗯,快多了
// 不好 (如果列表元素非常多,你就悲剧了)
$('li.trigger').click(handlerFn);
// 好些:使用 $.fn.live 进行事件代理
$('li.trigger').live('click', handlerFn);
// 最好:使用 $.fn.delegate 进行事件代理
// 因为这样可以明确的指定一个上下文
$('#myList').delegate('li.trigger', 'click', handlerFn);
var $table = $('#myTable');
var $parent = $table.parent();
$table.detach();
// ... 例如这里给表格添加了很多很多行
$parent.append(table);
// 当元素少于 20 个时使用这个方法,多余 20 个时,速度就慢了
$('a.swedberg').css('color', '#asd123');
// 多余 20 个元素时,应考虑直接在页面中添加 style 标签
$('<style type="text/css">a.swedberg { color : #asd123 }</style>')
.appendTo('head');
// 速度一般 $(elem).data(key,value); // 速度提升 10 倍 $.data(elem,key,value);
// 不好:执行了三个函数之后
// 才发现结果集上没有任何元素
$('#nosuchthing').slideUp();
// 好
var $mySelection = $('#nosuchthing');
if ($mySelection.length) { $mySelection.slideUp(); }
// 最好:增加一个 doOnce 插件
jQuery.fn.doOnce = function(func){
this.length && func.apply(this);
return this;
}
$('li.cartitems').doOnce(function(){
// 这里可以确保结果集不是空的
});
// 老掉牙的写法
var test = 1;
var test2 = function() { ... };
var test3 = test2(test);
// 新写法
var test = 1,
test2 = function() { ... },
test3 = test2(test);
(function(foo, bar) { ... })(1, 2);
// 土方法
if (type == 'foo' || type == 'bar') { ... }
// 较先进的方法
if (/^(foo|bar)$/.test(type)) { ... }
// 使用对象查找
if (({ foo : 1, bar : 1 })[type]) { ... }
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有