<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- import CSS -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
</head>
<body>
<div id="app">
<el-button @click="visible = true">Button</el-button>
<el-dialog :visible.sync="visible" title="Hello world">
<p>Try Element</p>
</el-dialog>
<el-input placeholder="输入关键字进行过滤" v-model="filterText">
</el-input>
<el-tree class="filter-tree" :data="data" :props="defaultProps" default-expand-all :filter-node-method="filterNode"
ref="tree">
<span class="custom-tree-node" slot-scope="{ node, data }">
<div v-html="node.label"></div>
</span>
</el-tree>
</div>
</body>
<!-- import Vue before Element -->
<script src="https://unpkg.com/vue@2/dist/vue.js"></script>
<!-- import JavaScript -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script>
new Vue({
el: '#app',
data: function () {
return {
visible: false,
filterText: '',
data: [{
id: 1,
label: '一级 1',
children: [{
id: 4,
label: '二级 1-1',
children: [{
id: 9,
label: '三级 1-1-1'
}, {
id: 10,
label: '三级 1-1-2'
}]
}]
}, {
id: 2,
label: '一级 2',
children: [{
id: 5,
label: '二级 2-1'
}, {
id: 6,
label: '二级 2-2'
}]
}, {
id: 3,
label: '一级 3',
children: [{
id: 7,
label: '二级 3-1'
}, {
id: 8,
label: '二级 3-2'
}]
}],
defaultProps: {
children: 'children',
label: 'label'
}
}
},
methods: {
handleLabelReg(label, searchStr) {
const reg = new RegExp(searchStr, 'gi');
let start = 0;
let end = 0;
let newStr = '';
let arr;
while ((arr = reg.exec(label)) !== null) {
end = arr.index;
newStr = newStr + label.slice(start, end);
start = end;
end = reg.lastIndex;
newStr = newStr + `<span style="color: blue">${label.slice(start, end)}</span>`
start = end;
}
newStr = newStr + label.slice(end)
return newStr
},
filterNode(value, data) {
data.label = data.label.replace(/<[^>]*>|/g, '')
if (!value) return true;
if (data.label.indexOf(value) !== -1) {
data.label = this.handleLabelReg(data.label, value)
}
return data.label.indexOf(value) !== -1;
}
},
watch: {
filterText(val) {
this.$refs.tree.filter(val);
}
},
})
</script>
</html>
element-tree搜索高亮
最新推荐文章于 2025-04-15 15:46:57 发布