Selector trong jQuery - jQuery căn bản
Trong bài này chúng ta sẽ tìm hiểu về Selector trong jQuery, đây là bài khá quan trọng và nó là tiền đề để học các bài tiếp theo, vì vậy hãy đọc qua nhé các bạn. Trước tiên chúng ta tìm hiểu cú pháp của Selector và liên tưởng với cú pháp viết CSS đã nhé. ...
Trong bài này chúng ta sẽ tìm hiểu về Selector trong jQuery, đây là bài khá quan trọng và nó là tiền đề để học các bài tiếp theo, vì vậy hãy đọc qua nhé các bạn.
Trước tiên chúng ta tìm hiểu cú pháp của Selector và liên tưởng với cú pháp viết CSS đã nhé.
1. Selector trong jQuery là gì?
Có bao giờ bạn nghe câu nói truy vấn đối tượng HTML bằng jQuery chưa? Đó chính là ý nghĩa chính của Selector trong jQuery đấy, nghĩa là ta sẻ sử dụng cú pháp của Selector để duyệt qua tất cả các thẻ HTML và tìm một thẻ HTML đặc biệt nào đó.
Trong một file HTML sẽ có rất nhiều thẻ HTML và chúng được lồng với nhiều cấp khác nhau, mỗi thẻ sẽ có các thuộc tính (property) và một tên thẻ (tag name). Với số lượng thẻ nhiều như vậy nên việc trùng tên thẻ hoặc trùng tên thuộc tính rất hay xảy ra, vì vậy ta cần một cách nào đó để có thể tìm ra chúng. Với Javascript thì ta có thể sử dụng DOM nhưng trong jQuery thì ta có một cái tên khác đó là Selector.
Để các bạn dễ hiểu thì mình có một ví dụ như sau, giả sử mình có một đoạn mã HTML như bên dưới:
<div id="container"> <h1 id="title"></h1> <p class="description"> </p> </div>
Hãy truy vấn đến thẻ h1
có id="title"
.
Sử dụng Javascript:
var h1 = document.getElementById('title');
Sử dụng jQuery:
var h1 = $('#title');
Như vậy trong jQuery thì ta sử dụng cú pháp của CSS để truy vấn và đây cũng chính là cú pháp của Selector trong jQuery:
var element = $('CSS_SELECTOR');
Ví dụ: Tìm tất cả các thẻ HTML có class="desc"
.
var elements = $('.desc');
2. Duyệt các kêt quả trả về của Selector
Vấn đề duyệt qua các kết quả của Selector rất quan trọng vì hầu như các bạn sử dụng mà không hiểu nguyên tắc của nó.
Selector theo ID:
Nếu bạn truy vấn theo ID thì kết quả trả về là một đối tượng HTML, lúc này nêu trong tài liệu HTML tồn tại ID đó thì khi bạn đếm số phần tử (length) thì kết quả trả về 1, ngược lại sẽ trả về 0.
Ví dụ: XEM DEMO
Cho thẻ div#container
như sau:
<div id="container"></div>
Lúc này đoạn code sau có kết quả = 1 vì id container
tồn tại.
var element = $('#container'); alert(element.length);
Nhưng đoạn code sau có kết quả = 0 vì id id_not_found
không tồn tại.
var element = $('#id_not_found'); alert(element.length);
Selector theo Class:
Nếu truy vấn theo class thì kết quả sẽ trả về một mảng các phần tử và mỗi phần tử là một đối tượng HTML, lúc này nếu trong tài liệu HTML không tồn tại class đó thì khi bạn đếm số phần tử (length) thì có kết trả về 0, ngược lại kết quả trả về tổng số thẻ HTML có chứa class đó.
Ví dụ: XEM DEMO
Cho đoạn mã HTML sau:
<div class="container"> Container1 </div> <div class="container"> Container2 </div> <div class="container"> Container3 </div> <div class="container"> Container4 </div>
Lúc này đoạn code sau sẽ có kết quả là 4 vì ta có bốn phần tử chứa class container
.
var element = $('.container'); alert(element.length);
Nếu bạn thực hiện thao tác gán (set) thì nó sẽ có tác dụng cho toàn bộ kết quả, nhưng nếu bạn thực hiện thao tác lấy (get) thì nó chỉ có tác dụng với kết quả đầu tiên, vì vậy trường hợp get ta phải sử dụng vòng lặp để lặp qua từng phần tử trong kết quả trả về.
Ví dụ: Cho đoạn mã HTML sau:
<div class="container"> Container1 </div> <div class="container"> Container2 </div> <div class="container"> Container3 </div> <div class="container"> Container4 </div>
Gán background màu đỏ cho class container.
XEM DEMO
// Truy vấn đối tượng var element = $('.container'); // Gán CSS background màu đỏ $(element).css({ background : "red" });
Lấy giá trị chứa trong thẻ có class là container.
XEM DEMO
// Truy vấn đối tượng var element = $('.container'); // Lấy value var value = $(element).html(); alert(value);
Chạy demo bạn sẽ thấy nó chỉ lấy giá trị của phần tử đầu tiên bởi vì kết quả nó trả về là một mảng. Lúc này để lấy tất cả các giá trị thì ta phải sử dụng vòng lặp.
XEM DEMO
// Truy vấn đối tượng var element = $('.container'); // Lấy value var value = ''; // Dùng vòng lặp for (var i = 0; i <= element.length; i++){ value += $(element[i]).text(); } alert(value);
Các trường hợp khác:
Các trường hợp khác sẽ có cách xử lý theo hai nguyên tắc trên, nghĩa là nếu selector chỉ trả về một phần tử thì giống với selector theo ID và nếu trả về nhiều phần tử thì giống với selector theo Class.
3. Lời kết
Như vậy là mình đã giới thiệu xong khái niệm Selector trong jQuery và một số lưu ý khi sử dụng Selector. Vì bài hơi dài nên nếu trình bày luôn danh sách các Selector thì rất khó theo dõi, vì vậy bài tiếp theo mình sẽ nói về danh sách các Selector.