uni-app微信小程序——实现搜索关键字高亮

  • Post author:
  • Post category:小程序


一、实现功能:

通过搜索框搜索关键字,将搜索得到的结果里包含关键字的字体实现高亮的效果

二、实现思路:

使用js的indexof()方法检验是否包含某字符串,以及unshift() 方法可向数组的开头添加元素,新加一个key属性,将含有关键字的那部分字符串的key属性标记为true,其他均为false

三、核心代码:

tips:使用uni-app框架,使用原生的朋友请自行修改对应的代码即可。

html部分:

<template>
	<view>
		<view class="searchBox">
			<view class="searchImgBox">
				<image class="searchImg" src="/static/home/speaker.png"></image>
			</view>
			<input placeholder="请输入要搜索的问题" v-model="searchInput" class="searchText"></input>
			<view class="searchImgBox" @tap="searchQuestion">
				<image class="searchImg" src="/static/home/search.png"></image>
			</view>
		</view>
		<view class="questionBox" v-for="(item,index) in getQuestion" :key="index">
			<view class="topBox">
				<view class="iconBox">
					<image class="questionIcon" src="/static/question/question.png"></image>
				</view>
				<block v-for="(item2,index) in item">
					<text class="questionText" v-if="item2.key==true" style="color: red;">{{item2.str}}</text>
					<text class="questionText" v-else>{{item2.str}}</text>
				</block>
			</view>
			<view class="numberBox">
				<view class="nunberText">{{item[0].number}}人满意</view>
			</view>
		</view>
	</view>
</template>

js部分:

<script>
	export default {
		data() {
			return {
				getQuestion: [{
						str: "减肥能否喝酒",
						number: 12,
						key:false
					},
					{
						str: "固定食谱能减肥吗",
						number: 8,
						key:false
					},
					{
						str: "吃苹果能不能减肥",
						number: 25,
						key:false
					}
				],
				searchInput:""
			}
		},
		methods: {
			searchQuestion() {
				var that=this
				let hilight_word = function(key, word,number) {
					//indexof方法的作用:判断是否包含传入参数,返回大于等于0的值表示包含
					let idx = word.indexOf(key);
					let t = [];
					if (idx > -1) {
						if (idx == 0) {
							t = hilight_word(key, word.substr(key.length));
							t.unshift({
								key: true,
								str: key,
								number:number
							});
							return t;
						}
						if (idx > 0) {
							t = hilight_word(key, word.substr(idx));
							t.unshift({
								key: false,
								str: word.substring(0, idx),
								number:number
							});
							return t;
						}
					}
					return [{
						key: false,
						str: word,
						number:number
					}];
				};
				let searched = [];
				let inputs = this.searchInput;
				for (let i = 0; i < that.getQuestion.length; i++) {
					var current_word = that.getQuestion[i].str;
					var number = that.getQuestion[i].number;
					if (current_word.indexOf(inputs) > -1) {
						searched.push(hilight_word(inputs, current_word,number))
					}
				}
				this.getQuestion = searched;
				// console.log(this.getQuestion)
			}
		},
		onLoad() {
			
		}
	}
</script>

四、实现效果图



版权声明:本文为weixin_40677985原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。