Hướng dẫn tạo Filter table với Javascript
Filter table cũng giống với Filter list, chúng sẽ cho phép người dùng lọc lại các kết quả mà họ muốn lấy từ một danh sách dữ liệu. Tuy nhiên khác với Filter list, Filter table sẽ hiển thị các dữ liệu đó dưới dạng một bảng thay vì một giá trị đơn giản.
Trong bài này mình sẽ cùng các bạn tạo ra một Filter table đơn giản nhé. Let's do it!
1. Xây dựng giao diện
Việc đầu tiên là chúng ta cần tạo ra các thành phần trong ứng dụng, chúng đóng vai trò như nền móng của các ứng dụng. Các bạn tạo file index.html
và đặt đoạn code sau vào trong thẻ body:
<div class="container"> <h2>Freetuts.net hướng dẫn tạo Filter Table</h2> <input type="text" id="myInput" placeholder="Search for Club.." title="Type in a name of Club"> <table id="myTable"> <tr class="header"> <th style="width:60%;">Club</th> <th style="width:40%;">Country</th> </tr> <tr> <td>Arsenal</td> <td>England</td> </tr> <tr> <td>Atletico Madrid</td> <td>Spain</td> </tr> <tr> <td>Barcelona</td> <td>Spain</td> </tr> <tr> <td>Liverpool</td> <td>England</td> </tr> <tr> <td>Real Madrid</td> <td>Spain</td> </tr> <tr> <td>Bayern Munich</td> <td>Germany</td> </tr> <tr> <td>Borussia Dortmund</td> <td>Germany</td> </tr> <tr> <td>Paris Saint-Germain</td> <td>France</td> </tr> <tr> <td>Manchester United</td> <td>England</td> </tr> <tr> <td>Monaco</td> <td>France</td> </tr> </table> </div>
Trong phần này, mình tạo ra hai thành phần chính của một filter table, đó là một ô input để nhập giá trị tìm kiếm và một phần bảng(table) để hiện thị các kết quả tìm được dựa vào giá trị nhập ở ô input. Mình cũng đặt tất cả các thành phần trong thẻ div có class="container"
để dễ dạng định dạng cho toàn bộ các thành phần.
Bài viết này được đăng tại [free tuts .net]
OK vậy là xong phần giao diện, chúng ta đến bước tiếp theo nhé.
2. Thêm CSS để định dạng các thành phần
Trong bước này chúng ta sẽ sử dụng CSS để định dạng cho các thành phần của trang, các bạn dán đoạn mã sau vào bên trong thẻ style:
* { box-sizing: border-box; } .container { width: 500px; margin: auto; } #myInput { background-position: 10px 12px; background-repeat: no-repeat; width: 100%; font-size: 16px; padding: 15px; border: 1px solid #ddd; margin-bottom: 12px; } #myTable { display: none; border-collapse: collapse; width: 100%; border: 1px solid #ddd; font-size: 18px; } #myTable th, #myTable td { text-align: left; padding: 12px; } #myTable tr { border-bottom: 1px solid #ddd; } #myTable tr.header, #myTable tr:hover { background-color: #f1f1f1; }
Tất cả đều là các thuộc tính cơ bản trong CSS nên mình không giải thích nữa, các bạn chỉ cần lưu ý một điểm là chúng ta sẽ mặc định ẩn phần bảng chứa kết quả đi với thuộc tính display: none;
, sau khi người dùng tiến hành filter thì ta mới hiển thị các phần tử phù hợp. Nếu các bạn muốn hiển thị tất cá các kết quả ngay khi load xong trang thì bỏ dòng này đi nhé.
3. Thêm xử lý Javascript
Trong bước cuối cùng này, chúng ta sẽ sử dụng javascript để tìm kiếm các kết quả dựa vào giá trị người dùng nhập vào và hiển thị các kết quả phù hợp, các bạn thêm giúp mình đoạn mã script này vào sau thẻ body:
<script> // lấy thẻ input var input = document.getElementById("myInput"); // định nghĩa hàm xử lý myFunction function myFunction() { var filter, table, tr, td, i; // lấy giá trị người dùng nhập filter = input.value.toUpperCase(); // lấy phần bảng hiển thị kết quả table = document.getElementById("myTable"); // lấy tất cả các thẻ tr tr = table.getElementsByTagName("tr"); //Nếu filter không có giá trị ẩn các kết quả if (!filter) { table.style.display = "none"; }else{ // lặp qua tất cả các thẻ tr for (i = 0; i < tr.length; i++) { // lấy giá trị của thẻ td đầu tiên đại diện cho tên club td = tr[i].getElementsByTagName("td")[0]; if (td) { // kiểm tra giá trị filter có tồn tại trong thẻ tr không if (td.innerHTML.toUpperCase().indexOf(filter) > -1) { //nếu có hiển thị chúng table.style.display = "table"; tr[i].style.display = ""; } else { // nếu không ẩn chúng tr[i].style.display = "none"; } } } } } //gán sự kiện cho thẻ input input.addEventListener("keyup", myFunction); </script>
Mình đã giải thích rất cụ thể, các bạn đọc ghi chú để hiểu rõ về các bước hoạt động của đoạn mã script này nhé. Có một điểm cần lưu ý là mình đều sử dụng phương thức toUpperCase()
cho cả giá trị fillter và giá trị bên trong thẻ td chứa tên club(cái mà chúng ta sẽ so sánh) khi kiểm tra để chúng cùng là chữ in hoa, vậy nên filter table của chúng ta sẽ không biệt chữ hoa chữ thường.
Giờ chạy file index.html
để xem thành quả nhé!
4. Lời kết
Như vậy, qua bài viết này mình đã cùng các bạn xây dựng thành công một Filter table đơn giản, hi vọng rằng nó sẽ giúp đỡ các bạn phần nào trong quá trình xây dựng website của mình. Nếu các bạn muốn tạo một filter list với các kết quả là các giá trị đơn giản, hãy tham khảo qua bài viết Filter List.
Nếu có bất cứ thắc mắc nào các bạn có thể để lại trong phần bình luận, hẹn gặp lại trong các bài viết tiếp theo trên freetuts.net.
Tham khảo: w3schools.com