返回

Bootstrap、jQuery 和 Bootstrap-treeview 实现无限级菜单树和父子节点的选中功能

前端

前言

Bootstrap 是一个流行的前端框架,提供了一系列样式表、JavaScript 组件和 HTML 模板,帮助开发者快速构建响应式网站和应用程序。jQuery 是一个 JavaScript 库,为 JavaScript 提供了强大的工具集,简化了 DOM 操作、事件处理和动画等任务。Bootstrap-treeview 是一个 jQuery 插件,用于创建美观的树形菜单。

搭建环境

在开始之前,确保您已经安装了以下软件:

  • Node.js 和 npm
  • Bootstrap
  • jQuery
  • Bootstrap-treeview

创建基本项目结构

  1. 使用 npm 创建一个新的项目:
npm init -y
  1. 安装必要的依赖项:
npm install bootstrap jquery bootstrap-treeview
  1. 在项目目录中创建一个 index.html 文件,并添加以下代码:
<!DOCTYPE html>
<html>
<head>
  
  <link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.min.css">
  <script src="node_modules/jquery/dist/jquery.min.js"></script>
  <script src="node_modules/bootstrap-treeview/dist/bootstrap-treeview.min.js"></script>
</head>
<body>
  <div id="tree"></div>

  <script>
    $(function() {
      // 初始化树形菜单
      $('#tree').treeview({
        data: [
          {
            text: 'Parent Node 1',
            nodes: [
              {
                text: 'Child Node 1',
              },
              {
                text: 'Child Node 2',
              }
            ]
          },
          {
            text: 'Parent Node 2',
            nodes: [
              {
                text: 'Child Node 3',
              },
              {
                text: 'Child Node 4',
              }
            ]
          }
        ]
      });
    });
  </script>
</body>
</html>
  1. 在项目目录中创建一个 style.css 文件,并添加以下代码:
body {
  font-family: Arial, sans-serif;
}

.treeview .list-group-item {
  cursor: pointer;
}

.treeview .list-group-item:hover {
  background-color: #eee;
}

.treeview .list-group-item.active {
  background-color: #428bca;
  color: #fff;
}

重构原始数据

假设您从后端获取了一个 JSON 数组,其中包含菜单树的数据。该数组可能如下所示:

[
  {
    id: 1,
    parent_id: null,
    name: 'Parent Node 1'
  },
  {
    id: 2,
    parent_id: 1,
    name: 'Child Node 1'
  },
  {
    id: 3,
    parent_id: 1,
    name: 'Child Node 2'
  },
  {
    id: 4,
    parent_id: null,
    name: 'Parent Node 2'
  },
  {
    id: 5,
    parent_id: 4,
    name: 'Child Node 3'
  },
  {
    id: 6,
    parent_id: 4,
    name: 'Child Node 4'
  }
]

为了让数据与 Bootstrap-treeview 兼容,我们需要将其重构为如下格式:

[
  {
    text: 'Parent Node 1',
    nodes: [
      {
        text: 'Child Node 1',
      },
      {
        text: 'Child Node 2',
      }
    ]
  },
  {
    text: 'Parent Node 2',
    nodes: [
      {
        text: 'Child Node 3',
      },
      {
        text: 'Child Node 4',
      }
    ]
  }
]

您可以使用 JavaScript 中的 map()reduce() 方法来轻松地完成此转换。

渲染树形菜单

现在我们可以使用 Bootstrap-treeview 插件来渲染树形菜单。在您的 index.html 文件中,找到以下代码:

<div id="tree"></div>

并将其替换为:

<div id="tree" data-toggle="treeview"></div>

然后,在您的 script 标签中,找到以下代码:

$('#tree').treeview({
  data: [
    {
      text: 'Parent Node 1',
      nodes: [
        {
          text: 'Child Node 1',
        },
        {
          text: 'Child Node 2',
        }
      ]
    },
    {
      text: 'Parent Node 2',
      nodes: [
        {
          text: 'Child Node 3',
        },
        {
          text: 'Child Node 4',
        }
      ]
    }
  ]
});

并将其替换为:

$('#tree').treeview({
  data: processedData
});

其中,processedData 是您重构后的数据。

现在,当您打开 index.html 文件时,您应该会看到一个带有勾选框的树形菜单。您可以通过单击勾选框来选中或取消选中节点。

处理选中的节点数据

当您选中或取消选中节点时,Bootstrap-treeview 会触发一个 selected 事件。您可以使用此事件来处理选中的节点数据。

在您的 script 标签中,找到以下代码:

$('#tree').on('selected', function(event, node) {
  console.log(node);
});

然后,您可以使用 node 对象来获取选中的节点数据。

构建后端所需的数据结构

假设您需要将选中的节点数据发送到后端。您可以使用以下代码来构建后端所需的数据结构:

var selectedNodes = [];

$('#tree').on('selected', function(event, node) {
  selectedNodes.push(node.id);
});

$.ajax({
  url: '/save_selected_nodes',
  method: 'POST',
  data: {
    selected_nodes: selectedNodes
  }
});

在上面的代码中,我们使用 selectedNodes 数组来存储选中的节点 ID。然后,我们使用 jQuery 的 $.ajax() 方法将数据发送到后端。

总结

在本文中,我们介绍了如何使用 Bootstrap、jQuery 和 Bootstrap-treeview 来创建无限级菜单树,并实现父子节点的选中功能。我们还介绍了如何重构原始数据以匹配 Bootstrap-treeview 所需的数据结构,以及如何处理选中的节点数据以满足后端的要求。希望本文对您有所帮助。