Hướng dẫn data filter trong html

Filter list là một danh sách các kết quả tìm kiếm có thể được lọc lại mỗi khi người dùng nhập vào một kí tự. Chúng ta thường gặp một filter list trong ô tìm kiếm của các website bán hàng hoặc tin tức. Trong bài này mình sẽ hướng dẫn các bạn tạo một filter list đơn giản với Javascript.

Athens

  • Amsterdam
  • Atlanta
  • Alaska
  • Barcelona
  • Bologna
  • Berlin
  • Bordeaux
  • Copenhagen
  • Cardiff
  • Caen
  • Cannes
  • Trong phần này, mình tạo ra hai thành phần chính của một filter list, đó là một ô input để nhập giá trị tìm kiếm và một phần ul để hiện thị các kết quả tìm được dựa vào giá trị nhập ở ô input và 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.

    OK vậy là xong phần giao diện, chúng ta đến bước tiếp theo nhé.

    Bài viết này được đăng tại [free tuts .net]

    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;
    }
    
    #myUL {
      list-style-type: none;
      display: none;
      padding: 0;
      margin: 0;
    }
    
    #myUL li a {
      border: 1px solid #ddd;
      margin-top: -1px; 
      background-color: #f6f6f6;
      padding: 12px;
      text-decoration: none;
      font-size: 18px;
      color: black;
      display: block
    }
    
    #myUL li a.header {
      background-color: #e2e2e2;
      cursor: default;
    }
    
    #myUL li a:hover:not[.header] {
      background-color: #eee;
    }

    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 ul 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:

      // lấy thẻ input
      var input = document.getElementById["myInput"];
      // định nghĩa hàm xử lý myFunction
      function myFunction[] {
          var filter, ul, li, a, i;
          // lấy giá trị người dùng nhập
          filter = input.value.toUpperCase[];
          ul = document.getElementById["myUL"];
          li = ul.getElementsByTagName["li"];
          // Nếu filter không có giá trị thị ẩn phần kết quare\
          if [!filter] {
            ul.style.display = "none";
          }else{
            // lặp qua tất cả các thẻ li chứa kết quả
            for [i = 0; i < li.length; i++] {
                // lấy thẻ a trong các thẻ li
                a = li[i].getElementsByTagName["a"][0];
                // kiểm tra giá trị nhập có tôn tại trong nội dung thẻ a
                if [a.innerHTML.toUpperCase[].indexOf[filter] > -1] {
                  //nếu có hiển thị phàn tử ul và các thẻ li đó
                    ul.style.display = "block";
                    li[i].style.display = "";
                } else {
                  // nếu không ẩn các thẻ li
                    li[i].style.display = "none";
    
                }
            }
          }
      }
      //gán sự kiện cho thẻ input
      input.addEventListener["keyup", myFunction];
    

    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ẻ a khi kiểm tra để chúng cùng là chữ in hoa, vậy nên filter list 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 list đơ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ó 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

    Chủ Đề