Hiển thị tất cả các liên kết (href) từ thẻ bằng JavaScript

JavaScript Examples | by Học Javascript

Trong phát triển web, thẻ <a> (anchor) là một trong những phần tử HTML quan trọng, dùng để tạo các liên kết giữa các trang hoặc tài nguyên khác nhau. Việc truy xuất và xử lý các liên kết này không chỉ cần thiết cho các tác vụ như kiểm tra dữ liệu, phân tích trang, mà còn rất hữu ích trong việc xây dựng các chức năng động như lọc liên kết, tạo danh sách menu, hoặc thu thập dữ liệu.

Trong bài tập này, minh· sẽ sử dụng JavaScript để lấy ra tất cả các thẻ <a> trên trang web, đọc thuộc tính href từ mỗi thẻ và hiển thị toàn bộ danh sách liên kết đó ra console hoặc giao diện người dùng. Đây là một bài tập đơn giản nhưng giúp người học rèn luyện kỹ năng làm việc với DOM và dữ liệu HTML một cách hiệu quả.

Yêu cầu bài tập các liên kết (href) từ thẻ <a> bằng JavaScript

Bài tập này yêu cầu người học thực hiện các thao tác sau để hiểu rõ hơn về cách truy xuất và thao tác với các thẻ <a> trong tài liệu HTML:

Truy xuất tất cả các thẻ <a> trong tài liệu:

  • Sử dụng JavaScript để lấy tất cả các thẻ <a> có trong trang web. Để làm điều này, bạn có thể sử dụng các phương thức DOM như:

    • document.getElementsByTagName('a') để lấy tất cả các thẻ <a>.

    • Hoặc document.querySelectorAll('a') nếu muốn có cú pháp dễ đọc và linh hoạt hơn. Cả hai phương thức này đều trả về một tập hợp các thẻ <a> trong tài liệu.

Lấy và lưu lại giá trị thuộc tính href của từng thẻ:

  • Sau khi truy xuất được tất cả các thẻ <a>, bạn sẽ cần lấy giá trị của thuộc tính href từ mỗi thẻ. Thuộc tính href là nơi chứa liên kết (URL) mà mỗi thẻ <a> trỏ tới.

  • Bạn có thể truy xuất giá trị này thông qua cú pháp element.href (trong đó element là một thẻ <a> cụ thể). Điều này cho phép bạn lấy được đường dẫn mà mỗi thẻ liên kết dẫn tới.

Hiển thị danh sách liên kết ra:

  • Hiển thị ra Console: Sử dụng console.log() để in danh sách tất cả các liên kết (tức là các giá trị href) ra bảng điều khiển của trình duyệt. Đây là cách đơn giản và phổ biến để kiểm tra và hiển thị dữ liệu.

  • Hiển thị ra giao diện HTML: Bạn có thể tạo một danh sách không thứ tự (<ul>) và thêm các phần tử danh sách (<li>) vào đó, mỗi phần tử chứa một liên kết từ thuộc tính href. Điều này sẽ giúp người dùng nhìn thấy tất cả các liên kết trực tiếp trên giao diện web.

Ví dụ về cách hiển thị liên kết trong giao diện:

<ul id="links-list"></ul>

Sau đó, sử dụng JavaScript để thêm các liên kết vào thẻ <ul>:

let ulElement = document.getElementById("links-list");
allLinks.forEach(function(link) {
    let li = document.createElement("li");
    li.textContent = link.href;
    ulElement.appendChild(li);
});

Các bước hướng dẫn các liên kết (href) từ thẻ <a> bằng JavaScript

Dưới đây là các bước chi tiết để hoàn thành bài tập này:

Tạo cấu trúc HTML cơ bản

Trước khi bắt đầu viết mã JavaScript, bạn cần tạo một cấu trúc HTML cơ bản với nhiều thẻ <a> chứa các liên kết khác nhau. Đây là các thẻ mà bạn sẽ thao tác trong bài tập.

Ví dụ về một file HTML đơn giản với các thẻ <a>:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Liên kết trên trang web</title>
</head>
<body>
    <h1>Danh sách liên kết trên trang web</h1>
    <a href="https://www.google.com">Google</a>
    <a href="https://www.wikipedia.org">Wikipedia</a>
    <a href="https://www.github.com">GitHub</a>

    <h2>Danh sách liên kết:</h2>
    <ul id="links-list"></ul> <!-- Khu vực để hiển thị các liên kết -->
</body>
</html>

Viết JavaScript lấy các thẻ <a>

Sau khi đã có cấu trúc HTML với các thẻ <a>, bước tiếp theo là sử dụng JavaScript để lấy tất cả các thẻ này.

Có thể sử dụng hai phương thức phổ biến:

  • document.querySelectorAll('a'): Trả về một NodeList chứa tất cả các thẻ <a> trong tài liệu. Đây là cách hiện đại và dễ đọc hơn.

  • document.getElementsByTagName('a'): Trả về một HTMLCollection chứa tất cả các thẻ <a>. Phương thức này cũng hoạt động tốt, nhưng NodeList từ querySelectorAll() thường dễ thao tác hơn.

Ví dụ sử dụng querySelectorAll:

let allLinks = document.querySelectorAll("a");

c. Truy xuất thuộc tính href

Khi bạn đã lấy được danh sách các thẻ <a>, bước tiếp theo là duyệt qua từng thẻ và lấy giá trị của thuộc tính href.

Mỗi thẻ <a> có thuộc tính href chứa URL mà nó liên kết tới. Để lấy giá trị này, bạn có thể sử dụng cú pháp element.href.

Ví dụ:

allLinks.forEach(function(link) {
    console.log(link.href); // In ra giá trị thuộc tính href của từng thẻ <a>
});

d. Hiển thị kết quả

Sau khi lấy được danh sách các liên kết, bạn có thể hiển thị chúng ra console hoặc giao diện HTML.

  1. Hiển thị trong Console:
    Để in kết quả vào console, bạn có thể sử dụng console.log() trong vòng lặp như đã làm ở bước trước:

allLinks.forEach(function(link) {
    console.log(link.href); // In ra giá trị href trong console
});

Hiển thị trong Giao diện HTML:
Bạn có thể tạo một danh sách không thứ tự (<ul>) và thêm các phần tử danh sách (<li>) để hiển thị mỗi liên kết trong giao diện web. Để làm điều này, sử dụng JavaScript để tạo phần tử HTML động và chèn vào trang.

Ví dụ:

let ulElement = document.getElementById("links-list"); // Lấy thẻ <ul> từ HTML
allLinks.forEach(function(link) {
    let li = document.createElement("li"); // Tạo thẻ <li> mới
    li.textContent = link.href; // Gán liên kết vào nội dung của <li>
    ulElement.appendChild(li); // Thêm <li> vào <ul>
});

Cách này sẽ hiển thị các liên kết trên giao diện web của bạn dưới dạng danh sách.

Gợi ý cách triển khai các liên kết (href) từ thẻ <a> bằng JavaScript

Tách logic lấy liên kết thành một hàm riêng

Để mã dễ tái sử dụng và dễ bảo trì, bạn có thể tách phần logic lấy tất cả các thẻ <a> và truy xuất thuộc tính href thành một hàm riêng. Điều này giúp bạn sử dụng lại hàm này ở những nơi khác trong mã của mình nếu cần.

Ví dụ về một hàm để lấy tất cả các liên kết:

function getAllLinks() {
    let allLinks = document.querySelectorAll("a"); // Lấy tất cả thẻ <a>
    return allLinks;
}

Hàm này trả về một NodeList chứa tất cả các thẻ <a> trên trang, giúp bạn dễ dàng thao tác với các thẻ này sau.

Gợi ý đoạn mã mẫu để xử lý và hiển thị liên kết

Để xử lý và hiển thị các liên kết, bạn có thể tạo một hàm riêng để xử lý việc duyệt qua các thẻ <a>, lấy giá trị thuộc tính href, và hiển thị nó trên giao diện.

Ví dụ về một hàm để hiển thị các liên kết trong giao diện:

function displayLinks() {
    let allLinks = getAllLinks(); // Gọi hàm getAllLinks để lấy các thẻ <a>
    let ulElement = document.getElementById("links-list"); // Lấy thẻ <ul> để hiển thị liên kết

    // Nếu không có thẻ <a> nào
    if (allLinks.length === 0) {
        ulElement.innerHTML = "<li>Không có liên kết nào trên trang.</li>";
        return;
    }

    // Duyệt qua các thẻ <a> và hiển thị
    allLinks.forEach(function(link) {
        let li = document.createElement("li"); // Tạo phần tử <li> mới
        li.textContent = link.href; // Gán giá trị href vào nội dung của <li>
        ulElement.appendChild(li); // Thêm <li> vào <ul>
    });
}

Đoạn mã trên sẽ lấy tất cả các thẻ <a>, kiểm tra nếu có, sau đó duyệt qua và hiển thị giá trị href trong một danh sách <ul>. Nếu không có thẻ <a> nào, sẽ hiển thị thông báo "Không có liên kết nào trên trang."

Xử lý trường hợp không có thẻ <a> nào

Như đã đề cập trong phần trên, bạn cần xử lý trường hợp không có thẻ <a> nào trên trang. Cách đơn giản là kiểm tra độ dài của danh sách các thẻ <a>:

if (allLinks.length === 0) {
    ulElement.innerHTML = "<li>Không có liên kết nào trên trang.</li>";
    return;
}

Điều này đảm bảo rằng nếu không có thẻ <a> nào trên trang, người dùng sẽ nhận được một thông báo thay vì một danh sách trống.

Mở rộng các liên kết (href) từ thẻ <a> bằng JavaScript

Lọc và hiển thị các liên kết chứa một từ khóa cụ thể

Bạn có thể mở rộng bài tập bằng cách lọc các liên kết theo một từ khóa nhất định trong thuộc tính href. Đây là cách để chỉ hiển thị các liên kết có chứa từ khóa, ví dụ như "google".

Ví dụ:

function filterLinks(keyword) {
    let allLinks = getAllLinks();
    let filteredLinks = Array.from(allLinks).filter(function(link) {
        return link.href.includes(keyword); // Kiểm tra nếu href chứa từ khóa
    });

    let ulElement = document.getElementById("links-list");
    ulElement.innerHTML = ""; // Làm sạch danh sách hiện tại

    if (filteredLinks.length === 0) {
        ulElement.innerHTML = "<li>Không có liên kết chứa từ khóa.</li>";
        return;
    }

    filteredLinks.forEach(function(link) {
        let li = document.createElement("li");
        li.textContent = link.href;
        ulElement.appendChild(li);
    });
}

Bạn có thể gọi hàm filterLinks("google") để chỉ hiển thị các liên kết có chứa "google" trong thuộc tính href.

Phân loại liên kết: nội bộ vs. bên ngoài

Bạn có thể phân loại các liên kết là nội bộ (chỉ dẫn đến các trang trên cùng một domain) hoặc bên ngoài (liên kết đến trang web khác).

Ví dụ về cách phân loại:

function categorizeLinks() {
    let allLinks = getAllLinks();
    let internalLinks = [];
    let externalLinks = [];

    allLinks.forEach(function(link) {
        if (link.hostname === window.location.hostname) {
            internalLinks.push(link.href); // Liên kết nội bộ
        } else {
            externalLinks.push(link.href); // Liên kết bên ngoài
        }
    });

    console.log("Liên kết nội bộ:", internalLinks);
    console.log("Liên kết bên ngoài:", externalLinks);
}

Hàm này phân loại các liên kết thành hai nhóm: nội bộ và bên ngoài. Sau đó, nó in ra kết quả trong console.

Gắn sự kiện click để hiển thị thông tin chi tiết của từng liên kết

Để người dùng có thể nhận thêm thông tin chi tiết về từng liên kết khi nhấp vào, bạn có thể gắn sự kiện click vào các thẻ <a>.

Ví dụ:

function addLinkClickEvent() {
    let allLinks = getAllLinks();

    allLinks.forEach(function(link) {
        link.addEventListener("click", function(event) {
            event.preventDefault(); // Ngừng hành động mặc định của liên kết
            alert("Thông tin chi tiết: " + link.href);
        });
    });
}
Hàm addLinkClickEvent() sẽ gắn sự kiện click vào tất cả các liên kết. Khi người dùng nhấp vào một liên kết, một hộp thông báo sẽ hiển thị href của liên kết đó.

Kết bài

Thông qua bài tập này, chúng ta đã tìm hiểu cách sử dụng JavaScript để truy xuất và thao tác với các thẻ <a> trong một trang web. Việc lấy và hiển thị tất cả các liên kết trong trang không chỉ giúp chúng ta hiểu rõ hơn về cách làm việc với DOM mà còn mở rộng khả năng tương tác của trang web với người dùng.

Bên cạnh việc đơn giản là hiển thị các liên kết, bài tập còn hướng dẫn cách lọc và phân loại liên kết, giúp người dùng dễ dàng tìm thấy thông tin cần thiết. Các tính năng mở rộng như phân loại liên kết nội bộ và bên ngoài hay gắn sự kiện click vào các liên kết còn giúp nâng cao tính năng của trang web và tạo trải nghiệm người dùng tốt hơn.

Hiểu và thực hành thao tác với DOM là một kỹ năng quan trọng khi phát triển web, và bài tập này đã giúp củng cố những kiến thức cơ bản về JavaScript mà bạn có thể áp dụng trong các dự án thực tế. Chúc bạn tiếp tục tìm hiểu và phát triển thêm các tính năng mới cho trang web của mình!

Bài viết liên quan