当前位置:首页 > VUE

tree模糊搜索实现vue

2026-02-22 20:31:06VUE

tree模糊搜索实现vue

实现 Vue 中的 Tree 模糊搜索

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

tree模糊搜索实现vue

核心思路

  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>

性能优化

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

  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 实现模糊查询的方法 在 Vue 中实现模糊查询可以通过多种方式完成,以下是几种常见的方法: 使用 JavaScript 的 filter 和 includes 方法 通过 Vue 的 com…

vue实现模糊背景

vue实现模糊背景

实现模糊背景的方法 在Vue中实现模糊背景效果,可以通过CSS的filter属性或backdrop-filter属性来实现。以下是几种常见的实现方式: 使用CSS filter属性 通过CS…

vue前端实现模糊查询

vue前端实现模糊查询

实现模糊查询的基本思路 在Vue中实现模糊查询通常需要结合输入框的监听事件和数据过滤功能。核心逻辑是通过用户输入的关键词,对目标数据进行筛选匹配。 使用计算属性实现 计算属性适合处理需要响应式更新的…

tree模糊搜索实现vue

tree模糊搜索实现vue

实现 Vue 中的 Tree 模糊搜索 在 Vue 中实现 Tree 组件的模糊搜索功能,通常需要结合递归组件、过滤算法和动态渲染。以下是具体实现方法: 递归组件结构 定义一个递归的 Tree 组件…

react tree的实现

react tree的实现

React Tree 的实现方法 使用递归组件实现树结构 递归组件是 React 中实现树形结构的常见方法。通过组件调用自身,可以动态渲染任意层级的树节点。 const TreeNode = ({…

css边缘模糊制作

css边缘模糊制作

使用 box-shadow 实现边缘模糊 通过 box-shadow 属性可以快速为元素添加边缘模糊效果。调整模糊半径(blur)参数控制模糊程度,spread 参数控制阴影扩散范围。…