Cơ bản về jQuery

jQuery là một Framework được xây dựng dựa trên các tính năng của JavaScript. Vì thế trong khi phát triển các ứng dụng sử dụng jQuery, bạn có thể sử dụng tất cả các hàm và các tính năng khác được bổ trợ trong JavaScript.

Chương này sẽ giải thích hầu hết khái niệm cơ bản thường được sử dụng trong các ứng dụng xây dựng trên jQuery.

Đối tượng String

Một chuỗi trong JavaScript là một đối tượng không đổi chứa 0, 1 hoặc nhiều ký tự.

Sau đây là một ví dụ hợp lệ về một String trong JavaScript.

"This is JavaScript String"
'This is JavaScript String'
'This is "really" a JavaScript String'
"This is 'really' a JavaScript String"

Đối tượng Number trong jQuery

Đối tượng Number trong JavaScript là định dạng độ chính xác kép (64 bit) theo chuẩn IEEE 754. Chúng là không đổi, như đối tượng String.

Sau đây là ví dụ hợp lệ về một số trong JavaScript.

5350
120.27
0.26

Đối tượng Boolean trong jQuery

Một Boolean trong JavaScript có thể nhận hoặc true hoặc false. Nếu một số là 0, thì mặc định của nó là false. Nếu một chuỗi là trống, thì mặc định là false.

Sau đây là các ví dụ hợp lệ về đối tượng Boolean trong JavaScript.

true      // true
false     // false
0         // false
1         // true
""        // false
"hello"   // true

Đối tượng Object trong jQuery

JavaScript hỗ trợ tốt khái niệm Object. Bạn có thể tạo một Object bởi sử dụng Object Literal như sau:

var emp = {
   name: "Zara",
   age: 10
};

Bạn có thể viết và đọc các thuộc tính của một Object bởi sử dụng ký hiệu dấu chấm (.) như sau:

// Getting object properties
emp.name  // ==> Zara
emp.age   // ==> 10

// Setting object properties
emp.name = "Daisy"  // <== Daisy
emp.age  =  20      // <== 20

Đối tượng Array trong jQuery

Bạn có thể định nghĩa các mảng bởi sử dụng Array Literal như sau:

var x = [];
var y = [1, 2, 3, 4, 5];

Một mảng có một thuộc tính length là hữu ích cho tính lặp:

var x = [1, 2, 3, 4, 5];
for (var i = 0; i < x.length; i++) {
   // Do something with x[i]
}

Hàm (Function) trong jQuery

Một hàm trong JavaScript có thể được đặt tên hoặc ẩn danh. Một hàm được đặt tên có thể được định nghĩa bởi sử dụng từ khóa function như sau:

function named(){
   // do some stuff here
}

Một hàm ẩn danh có thể được định nghĩa theo cách tương tự như một hàm thông thường nhưng nó sẽ không có bất kỳ tên nào.

Một hàm ẩn danh có thể được gán tới một biến hoặc được truyền tới một phương thức như sau:

var handler = function (){
   // do some stuff here
}

jQuery sử dụng rất nhiều hàm ẩn danh như sau:

$(document).ready(function(){
   // do some stuff here
});

Các tham số trong jQuery

Các tham số trong JavaScript là một loại của Array mà có thuộc tính length. Ví dụ sau giải thích về điều này:

function func(x){
   console.log(typeof x, arguments.length);
}
func();                //==> "undefined", 0
func(1);               //==> "number", 1
func("1", "2", "3");   //==> "string", 3

Đối tượng Argument cũng có một thuộc tính callee, mà tham chiếu đến hàm bạn đang ở trong đó. Ví dụ:

function func() {
   return arguments.callee; 
}
func();                // ==> func

Context trong jQuery

Từ khóa nổi tiếng trong JavaScript là this tham chiếu tới Context hiện tại. Trong một hàm, this có thể thay đổi, phụ thuộc cách hàm đó được gọi.

$(document).ready(function() {
   // this refers to window.document
});

$("div").click(function() {
   // this refers to a div DOM element
});

Bạn có thể xác định Context cho một lần hàm bởi sử dụng các phương thức call() và apply().

Sự khác nhau giữa chúng là cách chúng truyền các tham số. call() truyền tất cả các tham số thông qua các tham số tới hàm, trong khi apply() chấp nhận một mảng như là các tham số.

function scope() {
   console.log(this, arguments.length);
}

scope() // window, 0
scope.call("foobar", [1,2]);  //==> "foobar", 1
scope.apply("foobar", [1,2]); //==> "foobar", 2

Phạm vi (Scope) trong jQuery

Phạm vi của một biến là khu vực trong chương trình của bạn mà biến đó được định nghĩa. Biến trong JavaScript sẽ chỉ có hai phạm vi:

  • Các biến Global − Một biến Global có phạm vi chung, nghĩa là nó được định nghĩa ở mọi nơi trong JavaScript code của bạn.
  • Các biến Local − Một biến Local sẽ chỉ nhìn thấy bên trong một hàm nơi nó được định nghĩa. Các tham số hàm luôn luôn là Local cho hàm đó.

Trong thân của một hàm, một biến Local có quyền ưu tiên cao hơn biến Global mà có cùng tên.

var myVar = "global";     // ==> Declare a global variable

function ( ) {
   var myVar = "local";   // ==> Declare a local variable
   document.write(myVar); // ==> local
}

Callback trong jQuery

Một callback là một hàm thuần JavaScript được truyền một số phương thức như là một tham số hoặc tùy chọn. Một số callback là các sự kiện, được gọi để cung cấp cho người sử dụng cơ hội để phản ứng lại khi một trạng thái nào đó được kích hoạt.

Hệ thống sự kiện trong jQuery sử dụng các callback này ở khắp mọi nơi, ví dụ:


$("body").click(function(event) {
   console.log("clicked: " + event.target);
});

Hầu hết callback cung cấp các tham số và một context. Trong ví dụ event-handler, callback được gọi với một tham số, một Event.

Một số callback được yêu cầu để trả về cái gì đó, cái khác trả về giá trị tùy ý. Để ngăn cản sự đệ trình form, một xử lý sự kiện Submit có thể trả về false như sau:

$("#myform").submit(function() {
   return false;
});

Các Closure trong jQuery

Các Closure được tạo bất cứ khi nào một biến được định nghĩa bên ngoài phạm vi hiện tại được truy cập từ bên trong phạm vi nội bộ.

Ví dụ sau chỉ cách biến counter là nhìn thấy trong các hàm create, increment, và print, nhưng không nhìn thấy bên ngoài chúng.

function create() {
   var counter = 0;
   return {
      increment: function() {
         counter++;
      },

      print: function() {
         console.log(counter);
      }
   }
}
var c = create();
c.increment();
c.print();     // ==> 1

Pattern này cho phép bạn tạo các đối tượng với các phương thức, mà hoạt động trên dữ liệu, mà không thấy được ở bên ngoài. Bạn ghi nhớ rằng, data hiding là khái niệm rất cơ bản của các chương trình hướng đối tượng.

Proxy Pattern trong jQuery

Một Proxy là một đối tượng mà có thể được sử dụng để điều khiển sự truy cập tới phần tử khác. Nó thi hành cùng giao diện cho đối tượng khác này và truyền trên bất kỳ phương thức nào tới nó. Đối tượng khác này thường được gọi là Real Subject.

Một Proxy có thể được khởi tạo tại vị trí của Real Subject này và cho phép nó để được truy cập ở chế độ từ xa. Chúng ta có thể lưu giữ phương thức setArray của jQuery trong một Closure và viết đè lên (overwrite) nó như sau:

(function() {
   // log all calls to setArray
   var proxied = jQuery.fn.setArray;

   jQuery.fn.setArray = function() {
      console.log(this, arguments);
      return proxied.apply(this, arguments);
   };
})();

Ví dụ trên bao code của nó trong một hàm để ẩn biến proxied. Sau đó, Proxy này log tất cả các lời gọi phương thức và ủy thác lời gọi đó cho phương thức ban đầu. Sử dụng apply(this, arguments) bảo đảm cho việc người gọi không thể chú ý về sự khác nhau giữa phương thức ban đầu và phương thức được ủy nhiệm.

Các hàm có sẵn trong jQuery

JavaScript đi kèm một tập hợp các hàm hữu ích gắn liền với nó. Những phương thức này có thể được sử dụng để thao tác String, Number, và Date.

Bảng dưới liệt kê các hàm JavaScript quan trọng:

STTPhương thức & Miêu tả
1charAt()Trả về ký tự tại chỉ mục (index) đã cho.
2concat()Kết nối hai chuỗi văn bản và trả về một chuỗi mới.
3forEach()Gọi một hàm cho mỗi phần tử của một mảng.
4indexOf()Trả về chỉ mục về sự xuất hiện đầu tiên bên trong việc gọi đối tượng String với giá trị đã cho, hoặc -1 nếu không tìm thấy.
5length()Trả về độ dài của chuỗi.
6pop()Gỡ bỏ phần tử cuối của một mảng và trả về phần tử đó.
7push()Thêm một hoặc nhiều phần tử tới phần cuối của một mảng và trả về độ dài mới của mảng đó.
8reverse()Đảo ngược thứ tự các phần tử trong một mảng – phần tử đầu tiên thành cuối cùng và cuối cùng thành đầu tiên.
9sort()Sắp xếp phân loại các phần tử của một mảng.
10substr()Trả về các ký tự trong một mảng bắt đầu từ vị trí đã cho từ số các ký tự đã xác định.
11toLowerCase()Trả về giá trị chuỗi đang gọi được biến đổi thành kiểu chữ thường.
12toString()Trả về sự biểu diễn chuỗi của giá trị số.
13toUpperCase()Trả về giá trị chuỗi đang gọi được biến đổi thành chữ hoa.

Bạn truy cập trang sau để có danh sách đầy đủ − Các hàm có sẵn trong JavaScript.

Document Object Model (DOM)

DOM là một cấu trúc cây của các phần tử HTML đa dạng, như sau:

<html>
   <head>
      <title>The jQuery Example</title>
   </head>

   <body>
      <div>
         <p>This is a paragraph.</p>
         <p>This is second paragraph.</p>
         <p>This is third paragraph.</p>
      </div>
   </body>

</html>

Nó sẽ cho kết quả sau:

This is a paragraph. This is second paragraph. This is third paragraph.

Sau đây là một số điểm quan trọng về cấu trúc cây trên:

  • Thẻ <html> là ancestor (gốc hay là tổ tiên) của tất cả các phần tử khác; nói cách khác, tất cả phần tử khác là con cháu của phần tử <html>.
  • Thẻ <head> và <body> không là hậu duệ (descendant), nhưng cũng là con của <html>.
  • Phần tử <p> là con của phần tử <div>, con của phần tử <body> và <html>, và là anh em của các phần tửkhác.

Trong khi học các khái niệm jQuery, nó thực sự hữu ích khi bạn hiểu về DOM, nếu bạn chưa có khái niệm gì về DOM, tôi đề nghị bạn truy cập trang sau: DOM Tutorial.

Bình luận