dom搜索是比较昂贵的,所以记得用缓存功能
// 垃圾代码
$element = $('#element');
h = $element.height();
$element.css('height',h-20);
// 优秀代码
var $element = $('#element');
var h = $element.height();
$element.css('height',h-20);
// 垃圾代码
var first = $('#first');
var second = $('#second');
var value = $first.val();
// 优秀代码
var $first = $('#first');
var $second = $('#second'),
var value = $first.val();
var $first = $('#first'),
$second = $('#second'),
value = $first.val(),
k = 3,
cookiestring = 'SOMECOOKIESPLEASE',
i,
j,
myArray = {};
// 垃圾代码
$first.click(function(){
$first.css('border','1px solid red');
$first.css('color','blue');
});
$first.hover(function(){
$first.css('border','1px solid red');
})
// 优秀代码
$first.on('click',function(){
$first.css('border','1px solid red');
$first.css('color','blue');
})
$first.on('hover',function(){
$first.css('border','1px solid red');
})
// 垃圾代码
$("#myLink").on("click", function(){...}); // 不要这样
// 优秀代码
function myLinkClickHandler(){...}
$("#myLink").on("click", myLinkClickHandler);
// 之后,让我们优雅地解除绑定
$("#myLink").unbind("click.mySpecialClick");
$("#list a").on("click", myClickHandler); // BAD,
$("#list").on("click", "a", myClickHandler); // GOOD,
$("#parent-container").on("click", "a", delegatedClickHandlerForAjax);
// 糟糕的做法:
$(function(){ ... });
// 好的做法
$(initPage); // 抑或 $(document).ready(initPage);
function initPage(){
// 这里你可以进行程序的初始化了
}
<script src="my-document-ready.js"></script>
<script>
// 初始化一些必要的全局变量
$(document).ready(initPage); // 抑或 $(initPage);
</script>
// 垃圾代码
$first.click(function(){
$first.css('border','1px solid red');
$first.css('color','blue');
});
// 优秀代码
$first.on('click',function(){
$first.css({
'border':'1px solid red',
'color':'blue'
});
});
// 垃圾代码
$second.html(value);
$second.on('click',function(){
alert('hello everybody');
});
$second.fadeIn('slow');
$second.animate({height:'120px'},500);
// 优秀代码
$second.html(value);
$second.on('click',function(){
alert('hello everybody');
}).fadeIn('slow').animate({height:'120px'},500);
$("#myLink")
.addClass("bold")
.on("click", myClickHandler)
.on("mouseover", myMouseOverHandler)
.show();
// 垃圾代码
$second.html(value);
$second.on('click',function(){
alert('hello everybody');
}).fadeIn('slow').animate({height:'120px'},500);
// 优秀代码
$second.html(value);
$second
.on('click',function(){ alert('hello everybody');})
.fadeIn('slow')
.animate({height:'120px'},500);
// 垃圾代码
function initVar($myVar) {
if(!$myVar) {
$myVar = $('#selector');
}
}
// 优秀代码
function initVar($myVar) {
$myVar = $myVar || $('#selector');
}
// 垃圾代码
if(collection.length > 0){..}
// 优秀代码
if(collection.length){..}
// 垃圾代码
var $container = $("#container"),
$containerLi = $("#container li"),
$element = null;
$element = $containerLi.first();
//... a lot of complicated things
// 优秀代码
var $container = $("#container"),
$containerLi = $container.find("li"),
$element = null;
$element = $containerLi.first().detach();
//...a lot of complicated things
$container.append($element);
// 垃圾代码
$('#id').data(key,value);
// 优秀代码
$.data('#id',key,value);
// 垃圾代码
var $container = $('#container'),
$containerLi = $('#container li'),
$containerLiSpan = $('#container li span');
// 优秀代码
var $container = $('#container '),
$containerLi = $container.find('li'),
$containerLiSpan= $containerLi.find('span');
// 垃圾代码
$('.container > *');
// 优秀代码
$('.container').children();
// 垃圾代码
$('.someclass :radio');
// 优秀代码
$('.someclass input:radio');
复制代码
// 垃圾代码
$('div#myid');
$('div#footer a.myLink');
// 优秀代码
$('#myid');
$('#footer .myLink');
// 垃圾代码
$('#outer #inner');
// 优秀代码
$('#inner');
// 垃圾代码 - live is deprecated
$('#stuff').live('click', function() {
console.log('hooray');
});
// 优秀代码
$('#stuff').on('click', function() {
console.log('hooray');
});
性能比较:
http://jsperf.com/jquery-append-vs-string-concat
// 不好
var $myList = $("#list");
for(var i = 0; i < 10000; i++){
$myList.append("<li>"+i+"</li>");
}
// GOOD
var $myList = $("#list");
var list = "";
for(var i = 0; i < 10000; i++){
list += "<li>"+i+"</li>";
}
$myList.html(list);
// EVEN FASTER
var array = [];
for(var i = 0; i < 10000; i++){
array[i] = "<li>"+i+"</li>";
}
$myList.html(array.join(''));
// 糟糕:调用了三次attr
$myLink.attr("href", "#").attr("title", "my link").attr("rel", "external");
// 不错,只调用了一次attr
$myLink.attr({ href: "#", title: "my link", rel: "external" });
$(this).addClass("highlight")
.children("li").show().end()
.siblings().removeClass("highlight")
.children("li").hide();
window.onload和jquery $(document).ready(function(){ }) 比较(转)
window.onload是所有加载完后执行
$(document).ready(function(){ }) 是DOM结构加载完执行, 所谓DOM加载完,就是指DOM模型加载完,也就是指代码加载完
两者最大的区别,就是DOM加载完之后,不必再去等相应的图片文字视频等等内容加载完就可以执行JS代码了
1.不要用.getJson() 或 .get(),直接用直接用$.ajax() ,因为jQuery内部还是将前者转化为$.ajax()
2.表对HTTPS站点使用HTTP去发起请求,最好干脆就表指定(将HTTP或者HTTPS从你的URL中移除)
3.表在链接里面嵌参数,请使用专门的参数设置来传递
// 不易阅读的代码...
$.ajax({ url: "something.php?param1=test1¶m2=test2", .... });
// 更易阅读...
$.ajax({ url: "something.php", data: { param1: test1, param2: test2 } });
4.尽量指明数据类型以便你自己清楚要处理什么样的数据(见下方会提到的Ajax模板)
5..使用Promise模式的元素事件同样有效
$.ajax({ ... }).then(successHandler, failureHandler);
// 抑或
var jqxhr = $.ajax({ ... });
jqxhr.done(successHandler);
jqxhr.fail(failureHandler);
6.标准的Ajax模板如下,查看官方案例
var jqxhr = $.ajax({
url: url, type: "GET", // 默认为GET,你可以根据需要更改
cache: true, // 默认为true,但对于script,jsonp类型为false,可以自行设置
data: {}, // 将请求参数放这里.
dataType: "json", // 指定想要的数据类型
jsonp: "callback", // 指定回调处理JSONP类型的请求
statusCode: { // 如果你想处理各状态的错误的话
404: handler404,
500: handler500 }
});
jqxhr.done(successHandler);
jqxhr.fail(failureHandler);