el-tree获取过滤后的树结构
- 其他
- 2025-08-16 13:54:01

正常来说element框架应该返回的,但实际上没有,只能自己处理了
递归处理,思路就是赋值,如果是自己过滤到的数据就push进去,不是就不要
let newCheckTree = [] let tree = get_tree(treeData,newCheckTree); //获取过滤后的数据 function get_tree(treeData,newCheckTree,expandedList){ for(var i = 0;i< treeData.length;i++){ if(treeData[i].child.length){ newCheckTree[i] = {...treeData[i]} //把所有的值赋上,但是child要为空,不然就一模一样了 newCheckTree[i].child = [] newCheckTree[i].child = findChildren(treeData[i].child,newCheckTree[i].child) }else{ let val = treeData[i].jGMC.toUpperCase() if(val.indexOf(filterText) !== -1){ newCheckTree.push(treeData[i]) // console.log(expandedList,'that.expandedList') if(expandedList.indexOf(treeData[i].sid) == -1){ expandedList.push(treeData[i].sid) } } } } return newCheckTree } function findChildren(treeData,newCheckTree){ for(var i = 0;i< treeData.length;i++){ if(treeData[i].child.length){ newCheckTree[i] = {...treeData[i]} newCheckTree[i].child = [] newCheckTree[i].child = findChildren(treeData[i].child,newCheckTree[i].child) } let val = treeData[i].jGMC.toUpperCase() if(val.indexOf(filterText) !== -1){ newCheckTree.push(treeData[i]) // console.log(expandedList,'that.expandedList') if(expandedList.indexOf(treeData[i].sid) == -1){ expandedList.push(treeData[i].sid) } } } return newCheckTree }优化 其实这样拿到的数据虽然是过滤后的,但是也包括了父元素 比如一个父元素有七个子元素,这七个子元素都不是我们过滤到的,所以这时候应该连父元素一起都不要的 但是这个操作在递归里不好实现 所以还要再来一次处理
let newCheckTree = get_tree1(JSON.parse(JSON.stringify(tree))); //删掉过滤后没有子元素的数据,深拷贝不然会被影响 function get_tree1(treeData){ for(var i = 0;i< treeData.length;i++){ if(treeData[i]){ if(treeData[i].child.length){ treeData[i].child = findChildren1(treeData[i].child) }else{ //如果没有子数据就删掉它 treeData.splice(i,1) i-- } } } return treeData } function findChildren1(treeData){ for(var i = 0;i< treeData.length;i++){ // console.log(treeData,'treeData') if(treeData[i]){ if(treeData[i].child.length){ }else{ treeData.splice(i,1) i-- } } } return treeData }el-tree获取过滤后的树结构由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“el-tree获取过滤后的树结构”