jQuery编码标准和最佳实践
- - CSDN博客Web前端推荐文章初次翻译,有不好的地方请大家指正. 原文地址: http://lab.abhinayrathore.com/jquery-standards/. 这些都是一些常见的使用jQuery编写更好的代码的标准和最佳实践. 这些标准不包括JavaScript的标准或最佳做法. 在页面中总是偿试从CDN来加载jQuery.
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/jquery-1.11.0.min.js" type="text/javascript"><\/script>')</script>
点击这里 列举了一些比较流行的jQuery CDN服务器。 var $myDiv = $("#myDiv");
$myDiv.click(function(){...});
var $products = $("div.products"); // SLOW
var $products = $(".products"); // FAST
// BAD, 使用Sizzle选择器引擎 获取内嵌查询
var $productIds = $("#products div.id");
// GOOD, #products 直接使用 document.getElementById()获取。只有 div.id 需要使用 Sizzle选择器引擎
var $productIds = $("#products").find("div.id");
// 未优化的
$("div.data .gonzalez");
// 优化的
$(".data td.gonzalez");
$(".data table.attendees td.gonzalez");
// Better: 尽可能去掉中间限定条件.
$(".data td.gonzalez");
// SLOWER 遍历了所有的DOM查找.class
$('.class');
// FASTER 只查找class-container容器中的.
$('.class', '#class-container');
$('div.container > *'); // BAD
$('div.container').children(); // BETTER
$('div.someclass :radio'); // BAD
$('div.someclass input:radio'); // GOOD
$('#outer #inner'); // BAD
$('div#inner'); // BAD
$('.outer-container #inner'); // BAD
$('#inner'); // GOOD, 只调用document.getElementById()
var $myList = $("#list-container > ul").detach();
//...a lot of complicated things on $myList
$myList.appendTo("#list-container")
// BAD
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(''));
// BAD: 该操作在意识到元素不存在时,已经运行了3个函数
$("#nosuchthing").slideUp();
// GOOD
var $mySelection = $("#nosuchthing");
if ($mySelection.length) {
$mySelection.slideUp();
}
$("#myLink").on("click", function(){...}); // BAD
// GOOD
function myLinkClickHandler(){...}
$("#myLink").on("click", myLinkClickHandler);
$(function(){ ... }); // BAD: 你永远不能重用或给该函数写一个测试用例.
// GOOD
$(initPage); // or $(document).ready(initPage);
function initPage(){
// 页面加载事件时,你可以在这里初始化值或调用其它初始化函数。
}
<script src="my-document-ready.js"></script>
<script>
// 初始化任何需要的全局变量
$(document).ready(initPage); // or $(initPage);
</script>
<a id="myLink" href="#" onclick="myEventHandler();">my link</a> <!-- BAD -->
$("#myLink").on("click", myEventHandler); // GOOD
$("#myLink").on("click.mySpecialClick", myEventHandler); // GOOD
// 稍后,更容易只解除你的client函数的绑定
$("#myLink").unbind("click.mySpecialClick");
// 可读性差...
$.ajax({
url: "something.php?param1=test1¶m2=test2",
....
});
// 可读性更好...
$.ajax({
url: "something.php",
data: { param1: test1, param2: test2 }
});
$("#parent-container").on("click", "a", delegatedClickHandlerForAjax);
$.ajax({ ... }).then(successHandler, failureHandler);
// OR
var jqxhr = $.ajax({ ... });
jqxhr.done(successHandler);
jqxhr.fail(failureHandler);
var jqxhr = $.ajax({
url: url,
type: "GET", // 默认使用的 GET 但你可以根据需要使用其它类型
cache: true, // 默认使用 true, 当 dataType 为 'script' 或 'jsonp'时,设置为 false, 根据你的使用决定.
data: {}, // 在data对象中增加你的请求参数.
dataType: "json", // 指定 dataType 备查
jsonp: "callback", // 只指定匹配的 callback 参数与 JSONP 请求中一致.
statusCode: { // 如果你想处理指定的错误代码,使用这个状态码映射设置.
404: handler404,
500: handler500
}
});
jqxhr.done(successHandler);
jqxhr.fail(failureHandler);
$("#myDiv").addClass("error").show();
$("#myLink")
.addClass("bold")
.on("click", myClickHandler)
.on("mouseover", myMouseOverHandler)
.show();
$myLink.attr("href", "#").attr("title", "my link").attr("rel", "external"); // BAD, 3 次调用 attr()
// GOOD, 只有 1 次调用 attr()
$myLink.attr({
href: "#",
title: "my link",
rel: "external"
});
$("#mydiv").css({'color':red, 'font-weight':'bold'}); // BAD
.error { color: red; font-weight: bold; } /* GOOD */
$("#mydiv").addClass("error"); // GOOD
$("#myId"); // 该方法还是稍微的慢一些
document.getElementById("myId");
点击我
. 像上面这样把JavaSript代码和HTML代码混杂在一起的做法同样也非常不妥,因为它并没有将网页内容和行为分离,所以才有JQuery选择器的学习.点击我
. //给class为demo的元素添加行为.