如何使用 JavaScript 创建动态面包屑导航?


面包屑导航可以帮助网站用户了解导航路径,Windows 文件资源管理器就是提供面包屑导航的最佳示例。当您打开文件资源管理器时,您可以在顶部的工具栏中看到当前位置。此外,如果您点击任何位置,它都会跳转到该位置。

在网站上使用动态面包屑导航有两个主要好处。第一个是用户可以了解导航路径,另一个是用户可以直接跳转到导航路径中的任何位置。

在这里,我们将了解使用 JavaScript 创建面包屑导航的不同方法。

使用 jQuery 创建面包屑导航

jQuery包含各种方法,例如clone()、prepend()、parents()等,我们将在这里使用它们来创建自定义算法以生成动态面包屑导航。

语法

用户可以按照以下语法使用 JQuery 创建面包屑导航。

$('.URLS a').on('click', function () {
   $(this).parents('li').each(function (index, list) {
      let anchor = $(list).children('a').clone();
      $select.prepend(' / ', anchor);
   });

在上述语法中,“select”是使用 JQuery 选择的 div,用于添加面包屑导航作为 HTML。

使用的方法

on() – 用于在每个<a>元素上添加点击事件。

parent() – 它查找当前元素的所有父元素,并从中过滤出<li>元素。

each () – 用于遍历每个<li>元素,它是被点击元素的父元素。它将索引作为第一个参数,并将元素作为第二个参数。

clone() – 它创建任何 HTML 元素的副本。

prepend () – 用于在 HTML 元素内容的开头附加任何 HTML。

步骤

步骤 1 – 使用 on() 方法在每个<a>元素上添加点击事件监听器。

步骤 2 – 访问我们要添加面包屑导航的 HTML 元素。

步骤 3 – 使用 parents() 方法查找被点击元素的所有父元素,并从中过滤出<li>元素。

步骤 4 – 遍历每个父<li>元素并访问子<a>元素。

步骤 5 – 为每个<li>元素克隆子<a>元素。

步骤 6 – 使用 prepend () 方法将路径组件预先添加到所选元素的 HTML 中。

步骤 7 – 最后,将网站的主页位置预先添加到所选 div 元素的 HTML 中。

示例

在下面的示例中,我们创建了<li>元素来创建导航。我们还添加了一个列表作为另一个列表的子列表,以创建嵌套导航。

在 JavaScript 中,我们找到每个被点击元素的父列表,并将它们预先添加到面包屑导航中。由于 parent() 方法以相反的顺序返回父元素,因此我们需要使用 prepend 方法以原始顺序显示导航组件。

<html>
<head>
   <script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
</head>
<body>
   <h2> Creating the <i> dynamic breadcrumbs </i> using jQuery </h2>
   <div class = "URLS">
      <ul>
         <li> <a href="/"><b> URL 1 </b></a>
            <ul>
               <li> <a href="#"> Sub URL 1 </a> </li>
               <li> <a href="#"> Sub URL 2 </a> </li>
            </ul>
         </li>
         <li> <a href="#"><b> URL 2 </b></a>
            <ul>
               <li> <a href="#"> Sub URL 1 </a> </li>
               <li> <a href="#"> Sub URL 2</a>
                  <ul>
                     <li> <a href="#"><i> Sub Sub URL 1 </i></a> </li>
                     <li> <a href="#"><i> Sub Sub URL 2 </i></a> </li>
                  </ul>
               </li>
               <li> <a href="#"> Sub URL 3 </a> </li>
               <li> <a href="#"> Sub URL 4 </a> </li>
            </ul>
         </li>
         <li> <a href="#"> <b> URL 3 </b> </a>
            <ul>
               <li> <a href="#"> Sub URL 1 </a> </li>
               <li> <a href=" #"> Sub URL 2 </a> </li>
            </ul>
         </li>
      </ul>
   </div>
   <p class="breadcrumbs"></p> 
   <script type="text/javascript">
      
      // added click event on every anchor element
      $('.URLS a').on('click', function () {
         
         // selecting P element to append texts
         $select = $('<p class="breadcrumbs"></p>');
         
         // iterate through each <li> which are parent of clicked <a> element
         $(this).parents('li').each(function (index, list) {
            
            // make a clone of current <a> element
            let anchor = $(list).children('a').clone();
            
            // prepend current <a> element to breadcrumbs
            $select.prepend(' / ', anchor);
         });
         
         // prepend tutorialspoint.com at the beginning of the breadcrumb menu.
         $select.prepend('<a href="#">TutorialsPoint.com</a>')
         $('.breadcrumbs').html($select);
      })
   </script>
</body>
</html> 

获取当前位置并创建面包屑导航

我们可以使用window.location()方法获取浏览器的当前位置。之后,我们可以将位置 URL 拆分为组件,并使用它们创建面包屑导航。

语法

用户可以按照以下语法通过访问位置来创建面包屑导航。

let path = location.href.split('/').slice(3);
const linkPaths = [{ "main": 'TutorialsPoint.com', "link": '/' }];
for (let i = 0; i < path.length; i++) {
   linkPaths.push({ "main": anchorText, "link": link });
}
let values = linkPaths.map((part) => {
   return "<a href="" + part.link + "">" + part.main + "</a>"
}).join('<span style="margin: 5px">/</span>')

步骤

步骤 1 – 使用 location.href() 方法访问当前位置。

步骤 1.1 – 使用 split() 方法使用“/”分隔符分割 href。

步骤 1.2 – 使用 slice() 方法从数组中删除前三个元素,它们是“http”、“www”等。

步骤 2 – 创建一个包含对象的 linkPaths 数组。该对象包含文本和链接属性。

步骤 3 – 使用 for 循环遍历路径数组的元素,使用每个路径组件创建文本和链接,并将其推送到 linkPaths 数组中。此外,使用 decodeURIComponent() 方法解码 URI 组件。

步骤 4 – 使用 map() 方法在<span>元素中添加链接,并从 linkPaths 对象的数组中创建面包屑导航。

示例

在下面的示例中,我们从浏览器访问位置并实现上述算法来创建面包屑导航。此外,我们在面包屑导航的开头添加了指向 tutorialspoint 网站主页的链接。

<html>
<body>
  <h2>Creating the <i> dynamic breadcrumbs </i> using javascript.</h2>
  <p id="breadcrumbs"> </p>
  <script>
    function configureBredcrumbs() {
      // get the location
      let path = location.href.split('/').slice(3);
      // create an array of objects to store links and anchor text
      const linkPaths = [{ "main": 'tutorialspoint.com', "link": '/' }];
      // iterate through the path array
      for (let i = 0; i < path.length; i++) {
        const component = path[i];
        // convert URL to the text
        const anchorText = decodeURIComponent(component).toUpperCase().split('.')[0];
        // create a link
        const link = '/' + path.slice(0, i + 1).join('/');
        // push to array
        linkPaths.push({ "main": anchorText, "link": link });
      }
      // add links in the span
      let values = linkPaths.map((part) => {
        return "<a href="" + part.link + "">" + part.main + "</a>"
      }).join('<span style="margin: 5px">/</span>')

      let element = document.getElementById("breadcrumbs");
      element.innerHTML = values;
    }
    configureBredcrumbs();
  </script>
</body>
</html>

更新于: 2023年3月1日

3K+ 次浏览

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告