当前位置:首页 > VUE

tree模糊搜索实现vue

2026-02-22 20:31:06VUE

实现 Vue 中的 Tree 模糊搜索

在 Vue 中实现 Tree 组件的模糊搜索功能,可以通过过滤树节点数据来实现。以下是一个完整的实现方法:

核心思路

  1. 递归遍历树结构,检查每个节点的 label 是否包含搜索关键词
  2. 如果节点匹配,保留该节点及其所有父节点
  3. 对于不匹配的节点,检查其子节点是否有匹配项

实现代码

<template>
  <div>
    <input v-model="searchText" placeholder="输入搜索内容" />
    <el-tree
      :data="filteredTreeData"
      :props="defaultProps"
      node-key="id"
      default-expand-all
    />
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchText: '',
      treeData: [
        {
          id: 1,
          label: '一级 1',
          children: [
            { id: 4, label: '二级 1-1', children: [] }
          ]
        },
        {
          id: 2,
          label: '一级 2',
          children: [
            { id: 5, label: '二级 2-1', children: [] },
            { id: 6, label: '二级 2-2', children: [] }
          ]
        }
      ],
      defaultProps: {
        children: 'children',
        label: 'label'
      }
    }
  },
  computed: {
    filteredTreeData() {
      if (!this.searchText) return this.treeData
      return this.filterTree(this.treeData, this.searchText.toLowerCase())
    }
  },
  methods: {
    filterTree(nodes, searchText) {
      return nodes.filter(node => {
        const match = node.label.toLowerCase().includes(searchText)
        if (node.children && node.children.length) {
          const filteredChildren = this.filterTree(node.children, searchText)
          if (filteredChildren.length) {
            node.children = filteredChildren
            return true
          }
        }
        return match
      })
    }
  }
}
</script>

性能优化

对于大型树结构,可以考虑以下优化措施:

tree模糊搜索实现vue

  1. 添加防抖处理搜索输入
  2. 使用虚拟滚动只渲染可见节点
  3. 对树数据进行扁平化处理加速搜索
// 防抖实现示例
import { debounce } from 'lodash'

watch: {
  searchText: debounce(function(newVal) {
    this.searchText = newVal
  }, 300)
}

扩展功能

  1. 高亮匹配的文本
  2. 支持多字段搜索
  3. 添加搜索结果的统计信息
// 高亮匹配文本示例
highlightText(label, searchText) {
  if (!searchText) return label
  const reg = new RegExp(`(${searchText})`, 'gi')
  return label.replace(reg, '<span style="color: red">$1</span>')
}

注意事项

  1. 确保树数据结构正确,包含必要的 children 字段
  2. 搜索时注意大小写敏感性处理
  3. 对于异步加载的树,需要特殊处理未加载的节点

这种方法适用于大多数基于 Vue 的 Tree 组件实现,包括 Element UI、Ant Design Vue 等组件库中的 Tree 组件。根据具体需求可以调整过滤逻辑和展示效果。

标签: 模糊tree
分享给朋友:

相关文章

vue实现模糊搜索功能

vue实现模糊搜索功能

实现模糊搜索的基本思路 在Vue中实现模糊搜索功能通常需要结合输入框的事件监听、数据过滤以及实时展示。核心是利用JavaScript的字符串方法或正则表达式对数据进行匹配筛选。 使用计算属性实现模糊…

vue实现拼音模糊搜索

vue实现拼音模糊搜索

实现拼音模糊搜索的思路 在Vue中实现拼音模糊搜索,通常需要将中文转换为拼音,然后根据用户输入的拼音或关键字进行匹配。以下是实现这一功能的常见方法: 安装拼音转换库 使用pinyin库将中文转换为拼…

vue实现城市模糊查询

vue实现城市模糊查询

实现思路 使用Vue实现城市模糊查询功能,主要通过输入框监听用户输入,结合数组的过滤方法动态匹配城市名称。核心步骤包括数据准备、输入监听、模糊匹配和结果展示。 数据准备 准备一个城市列表数据,可以存…

vue中实现模糊查询

vue中实现模糊查询

实现模糊查询的方法 在Vue中实现模糊查询通常需要结合输入框的监听和数组过滤功能。以下是几种常见的实现方式: 使用计算属性过滤数据 <template> <div>…

react实现tree

react实现tree

React 实现 Tree 组件 使用 React 实现 Tree 组件可以通过递归渲染节点或使用第三方库简化开发。以下是两种常见方法: 递归组件实现 递归方式适合处理嵌套的树形数据,通过组件调用自…

react实现模糊搜索

react实现模糊搜索

实现模糊搜索的方法 在React中实现模糊搜索可以通过多种方式完成,常见的方法是使用第三方库如fuse.js或自定义搜索逻辑。以下是几种常见的方法: 使用fuse.js实现模糊搜索 fuse.js是…