MENUS
IMAGES
BUTTONS
FORMS
FILTERS
TABLES
MORE
WEBSITE
GRID
GOOGLE MAP
CONVERTERS
HOW TO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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:

Code RUN
<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:

Code RUN
* {
  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:

Code RUN
<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

Cùng chuyên mục:

Tạo Trang web E-commerce  từ HTML & CSS

Tạo Trang web E-commerce từ HTML & CSS

Validate form bằng HTML5

Validate form bằng HTML5

Trước đây chúng ta hay validate form bằng Javascript, nhưng ...

Thẻ aside trong HTML5

Thẻ aside trong HTML5

Mình cũng không rõ người ta tạo ra thẻ này làm gì, nhưng nếu xét…

Thẻ hgroup trong HTML5

Thẻ hgroup trong HTML5

hgroup là một thẻ được thêm vào kể từ phiên bản ...

Thẻ header trong HTML5

Thẻ header trong HTML5

Nếu nhìn qua một trang web được xây dựng bằng HTML5 thì bạn ...

Các thẻ HTML tạo form thu thập dữ liệu

Các thẻ HTML tạo form thu thập dữ liệu

Trước khi bắt đầu thì bạn phải hiểu khái niệm form dữ liệu là ...

Tạo background và đường viền cho thẻ HTML

Tạo background và đường viền cho thẻ HTML

Để tạo màu nền cho một thẻ HTML bất kì thì ta sử dụng thuộc…

Tạo menu một cấp bằng HTML đơn giản

Tạo menu một cấp bằng HTML đơn giản

Để làm menu 1 cấp thì có rất nhiều giải pháp. Bạn có thể sử…

Tạo HTML danh sách bài viết đơn giản

Tạo HTML danh sách bài viết đơn giản

Mục đích mình đưa ra bài tập này là giúp các bạn hiểu được cách…

Tạo bổ cục layout HTML đơn giản

Tạo bổ cục layout HTML đơn giản

Qua bài học này bạn sẽ biết cách tạo một file style riêng để ..

Phân biệt ID và Class trong HTML

Phân biệt ID và Class trong HTML

Mỗi thẻ HTML đều có những thuộc tính riêng và khác nhau. Tuy nhiền ..

Cách dùng thẻ div trong HTML để tạo các khối giao diện

Cách dùng thẻ div trong HTML để tạo các khối giao diện

Thẻ div đóng vai trò rất quan trọng, nó được dùng để tạo ...

Phân biệt thẻ HTML Block và Inline

Phân biệt thẻ HTML Block và Inline

Có bao giờ bạn thắc mắc rằng, tại sao nội dung ...

Thuộc tính style trong HTML

Thuộc tính style trong HTML

Do chúng ta chưa học CSS nên mình sẽ không nói ...

Thẻ title trong HTML

Thẻ title trong HTML

Cách sử dụng thẻ title html ...

Thẻ style trong HTML

Thẻ style trong HTML

Style là một thẻ HTML bình thường, nó có công dụng là xác ...

Thẻ base trong HTML

Thẻ base trong HTML

Cách sử dụng thẻ base trong html ...

Thẻ link trong HTML

Thẻ link trong HTML

Cách sử dụng thẻ html ...

Thẻ meta trong HTML

Thẻ meta trong HTML

Cách sử dụng thẻ meta html ...

Thẻ script trong HTML

Thẻ script trong HTML

Cách sử dụng thẻ script html ...

Top