el-tree 搜索高亮match部分

3.0以下不支持jpx

通过slot-scope方式

        <el-input
          placeholder="Search"
          size="small"
          v-model="filterText"
          clearable
          @input="onSearch"
        ></el-input>
        <el-tree
          ref="tree"
          show-checkbox
          node-key="key"
          :data="treeData"
          :default-checked-keys="defaultCheckedKeys"
          :default-expanded-keys="expandList"
          @check-change="onCheck"
          style="height:260px;overflowY:auto;padding-top:5px"
        >
          <span class="custom-tree-node" slot-scope="{ node }">
            <span style="margin-left:4px">{{ highLight(node.label)[0] }}</span>
            <span style="color:red;margin:0 -4px 0 -4px">{{ highLight(node.label)[1] }}</span>
            <span>{{ highLight(node.label)[2] }}</span>
          </span>
        </el-tree>


    onSearch () {
      if (this.filterText === '') {
        this.treeData = this.treeDataOrigin
        this.expandList = []
        this.defaultCheckedKeys = this.checkedKeys
        return
      }
      var treeMatched = [] // 树结构
      var expandList = []
      for (var i in this.treeDataOrigin) {
        var parentMatch = this.treeDataOrigin[i].title.indexOf(this.filterText) > -1
        this.$refs.tree.setCurrentKey(this.treeDataOrigin[i].key)
        var childrenMatch = false
        var children = []
        for (var j in this.treeDataOrigin[i].children) {
          if (this.treeDataOrigin[i].children[j].title.indexOf(this.filterText) > -1) {
            childrenMatch = true
            children.push(this.treeDataOrigin[i].children[j])
          }
        }
        // 命中父节点未命中子节点 全部展开
        if (parentMatch) {
          treeMatched.push(this.treeDataOrigin[i])
          expandList.push(this.treeDataOrigin[i].value)
        } else if (!parentMatch && childrenMatch) {
          // 子节点命中
          var item = JSON.parse(JSON.stringify(this.treeDataOrigin[i]))
          // 仅展示命中的子节点
          item.children = children
          treeMatched.push(item)
          expandList.push(this.treeDataOrigin[i].value)
        }
      }
      this.treeData = treeMatched
      this.expandList = expandList
      this.defaultCheckedKeys = this.checkedKeys
    },


    highLight (label) {
      var index = label.indexOf(this.filterText)
      if (index > -1) {
        var beforeStr = label.substr(0, index);
        var afterStr = label.substr(index + this.filterText.length);
        return [beforeStr, this.filterText, afterStr]
      }
      return [label, "", ""]
    },

3.0以上支持jpx

renderContent (h, { node, data, store }) {
      const index = node.label.indexOf(this.filterText);
      const beforeStr = node.label.substr(0, index);
      const afterStr = node.label.substr(index + this.filterText.length)
      const label = index > -1 ? (<span>{beforeStr}</span>)(<span style={'color: red'}> {this.filterText} </span>)(<span>{afterStr} </span>) : (<span>{node.label}</span>)
      return label

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值