Skip to content

Element Plus

遇到的问题和解决方案

Tree 树节点过滤时保留父节点和子节点

点我查看代码
vue
<script setup lang="ts">
function nodeMatches(node: Node, searchValue: string): boolean {
  return !!(node.data && node.data.name && node.data.name.includes(searchValue))
}

function filterNode(value: string, _data: any, node: Node): boolean {
  // 如果没有过滤值,显示所有节点
  if (!value) {
    return true
  }
  // 从当前节点开始,向上遍历至根节点
  let currentNode: Node | undefined = node
  while (currentNode) {
    // 如果当前节点匹配,则返回 true 以显示该节点
    if (nodeMatches(currentNode, value)) {
      return true
    }
    // 如果已经到达顶层节点,结束循环
    if (currentNode.level === 1)
      break
    // 向上遍历父节点
    currentNode = currentNode.parent
  }
  // 如果没有匹配的节点,则不显示
  return false
}
</script>

<template>
  <ElTree :filter-node-method="filterNode" />
</template>

基于 MIT 许可发布