Viết jQuery theo chuẩn
Đây là một số tiêu chuẩn chung và tối ưu code jquery. Các tiêu chuẩn này không bao gồm tiêu chuẩn Javascript hoặc thực hành tốt nhất. Nếu có bất kỳ câu hỏi nào hoặc đề xuất cải tiến bạn hãy để lại nhận xét bên dưới.
Loading jQuery
1
2
|
< script type = "text/javascript" src = "//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js" ></ script > < script >window.jQuery || document.write('< script src = "js/jquery-2.1.1.min.js" type = "text/javascript" ><\/script>')</ script > |
Danh sách các CDN jquery phổ biến:
Google: https://developers.google.com/speed/libraries/devguide
Microsoft: http://www.asp.net/ajaxlibrary/cdn.ashx
jQuery: http://jquery.com/download/
jsDelivr: http://www.jsdelivr.com
cdnjs: http://cdnjs.com
OSSCdn: http://osscdn.com
1
2
3
4
5
6
|
< script type = "text/javascript" src = "http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js" ></ script > < script type = "text/javascript" > if (typeof jQuery == 'undefined') { document.write(unescape("%3Cscript src='/js/jquery-1.4.2.min.js' type='text/javascript'%3E%3C/script%3E")); } </ script > |
Không sử dụng Jquery phiên bản 2.x nếu bạn phải hỗ trợ Internet Explorer 6/7/8
Đối với những ứng dụng web mới, nếu bạn không có vấn đề gì về tương thích plugin, chúng tôi khuyến khích bạn sử dụng phiên bản jquery mới nhất
Khi tải jquery từ CDN’s, luôn luôn xác định phiên bản jquery mà bạn muốn tải (ví dụ: 1.11.0 khác với 1.11 hoặc 1.
Không tải nhiều phiên bản jQuery.
Không sử dụng jquery-latest.js từ jQuery CDN.
1
2
3
|
jQuery(document).ready( function ($) { // code ở đây ta có thể sử dụng $ như thường! }); |
Biến jquery (Variables)
1
2
|
var $myDiv = $( "#myDiv" ); $myDiv.click ( function () {...}); |
Selectors
1
2
|
var $products = $( "div.products" ); // Chậm var $products = $( ".products" ); // Nhanh |
1
2
3
4
5
|
// BAD, truy vấn lồng nhau cho bộ chọn Sizzle var $productIds = $( "#products div.id" ); // GOOD, #products đã được chọn bởi document.getElementByid(), chỉ div.id cần phải qua bộ chon Sizzle nên nhanh hơn var $productIds = $( "#products" ).find( "div.id" ); |
1
2
3
4
5
|
// Không tối ưu $( "div.data .gonzalez" ); // Tối ưu $( ".data td.gonzalez" ); |
1
2
3
4
5
|
// Không tốt $( ".data table.attendees td.gonzalez" ); // Tốt: Bỏ ở giữa nếu có thể $( ".data td.gonzalez" ); |
1
2
3
4
5
|
// Chậm hơn vì nó đã đi qua toàn bộ DOM cho class $( '.class' ); // nhanh hơn vì bây giờ chỉ chọn class mà là con của class-container $( '.class' , '#class-container' ); |
1
2
|
$( 'div.container > *' ); // Không tốt $( 'div.container' ).children(); // Tốt |
1
2
|
$( 'div.someclass :radio' ); // Không tốt $( 'div.someclass input:radio' ); // Tốt |
1
2
3
4
|
$( '#outer #inner' ); // Không tốt $( 'div#inner' ); // Không tốt $( '.outer-container #inner' ); // Không tốt $( '#inner' ); // Tốt, chỉ gọi document.getElementById() |
Thao tác với DOM
1
2
3
|
var $myList = $( "#list-container > ul" ).detach(); //...thao tác $myList.appendTo( "#list-container" ); // Đính trở lại |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
// Không tốt var $myList = $( "#list" ); for ( var i = 0; i < 10000; i++){ $myList.append( "<li>" +i+ "</li>" ); } // Tốt var $myList = $( "#list" ); var list = "" ; for ( var i = 0; i < 10000; i++){ list += "<li>" +i+ "</li>" ; } $myList.html(list); //Tốt nhất var array = []; for ( var i = 0; i < 10000; i++){ array[i] = "<li>" +i+ "</li>" ; } $myList.html(array.join( '' )); |
1
2
3
4
5
6
7
8
|
// Không tốt: $( "#nosuchthing" ).slideUp(); // Tốt var $mySelection = $( "#nosuchthing" ); if ($mySelection.length) { $mySelection.slideUp(); } |
Sự kiện (Events)
1
2
3
4
5
|
$( "#myLink" ).on( "click" , function (){...}); // Không tốt // Tốt function myLinkClickHandler(){...} $( "#myLink" ).on( "click" , myLinkClickHandler); |
1
2
3
4
5
6
7
|
$( function (){ ... }); // Không tốt: Bạn không thể tái sử dụng hoặc viết kiểm tra cho chức năng này // Tốt $(initPage); // or $(document).ready(initPage); function initPage(){ } |
1
2
3
4
|
<script src= "my-document-ready.js" ></script> <script> $(document).ready(initPage); // or $(initPage); </script> |
1
2
|
<a id= "myLink" href= "#" onclick= "myEventHandler();" >my link</a> <!-- Không Tốt --> $( "#myLink" ).on( "click" , myEventHandler); // Tốt |
1
2
|
$( "#myLink" ).on( "click.mySpecialClick" , myEventHandler); // Tốt $( "#myLink" ).unbind( "click.mySpecialClick" ); |
Ajax
1
2
3
4
5
6
7
8
9
10
11
|
// Ít dùng $.ajax({ url: "something.php?param1=test1¶m2=test2" , .... }); // Nên dùng $.ajax({ url: "something.php" , data: { param1: test1, param2: test2 } }); |
1
|
$( "#parent-container" ).on( "click" , "a" , delegatedClickHandlerForAjax); |
1
2
3
4
5
6
|
$.ajax({ ... }).then(successHandler, failureHandler); // Hoặc var jqxhr = $.ajax({ ... }); jqxhr.done(successHandler); jqxhr.fail(failureHandler); |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
var jqxhr = $.ajax({ url: url, type: "GET" , // Mặc định là GET, bạn có thể thay đổi nếu muốn cache: true , // Mặc định là true data: {}, // thêm các thông số yêu cầu vào data object dataType: "json" , // xác định kiểu dữ liệu jsonp: "callback" , // Chỉ định này để phù hợp với tên của tham số gọi lại API của bạn đang chờ đợi cho các yêu cầu JSONP statusCode: { // nếu bạn muốn xử lý từng mã lỗi cụ thể, sử dụng bản đồ thiết lập trạng thái 404: handler404, 500: handler500 } }); jqxhr.done(successHandler); jqxhr.fail(failureHandler); |
Hiệu ứng và hình động(Effects và Animations)
Hãy thử sử dụng hiệu ứng đơn giản : show/hide , toggle, slideUp/slideDown
Hãy thử dùng các khoảng thời gian có sẵn “slow”,”fast” hoặc 400(mediun)
Plugins
Chaining
1
|
$( "#myDiv" ).addClass( "error" ).show(); |
1
2
3
4
5
|
$( "#myLink" ) .addClass( "bold" ) .on( "click" , myClickHandler) .on( "mouseover" , myMouseOverHandler) .show(); |
Một vài thứ khác
1
2
3
4
5
6
7
|
$myLink.attr( "href" , "#" ).attr( "title" , "my link" ).attr( "rel" , "external" ); // Không tốt, 3 lần gọi đến attr() // Tốt, chỉ 1 lần gọi attr() $myLink.attr({ href: "#" , title: "my link" , rel: "external" }); |
1
2
3
|
$( "#mydiv" ).css({ 'color' :red, 'font-weight' : 'bold' }); // Không tốt .error { color: red; font-weight: bold; } /* Tốt */ $( "#mydiv" ).addClass( "error" ); // GOOD |
1
2
|
$( "#myId" ); // chậm hơn so với document.getElementById( "myId" ); |
Leave a Reply