如图,一个单独的div滚动框
想要实现的效果是:
- 搜索关键词
- 滚动条定位到关键词所在的位置
- 高亮关键词
那个啥,用vue的话实现很简单了。
假设文本变量是content,
那添加一个计算属性contentShow, 使用指令v-html渲染出来.
contentShow中将关键词替换为一个font或span标签,给这个font和span写高亮样式即可。
比如:
content: '你好啊'
keyword: '你'
则
contentShow: <font class="text-search-match">你</font>好啊
css:
.text-search-match {
// 高亮样式
}
滚动的话,你需要用一个变量n记录当前搜索是到第几个关键词,回车或者点击下一个的时候则跳到下一个关键词.
取第n个关键词很简单,使用querySelectorAll()查出所有被替换的关键词标签列表,获取指定下标的元素,然后scrollIntoView即可。
嘿嘿简单吧,如有困惑可追问
感觉跟我这个差不多,思路就是查找出匹配的字符串,然后替换成带有样式的html标签,然后重新写入容器,如果还需要定位功能的话,再获取到那个dom的位置然后算出scrollTop的值就可以了
$('.actionBtnTit').each(function(index,item){
let content = item.innerHTML;
let result = content.search(val);
if(result>=0&&val!='') {
$(this).siblings('.actionBtnIco').css({
background:'#F76260'
})
} else {
$(this).siblings('.actionBtnIco').css({
background:'#10AEFF'
})
}
});
6 回答3k 阅读✓ 已解决
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
6 回答2.4k 阅读
5 回答6.4k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
思路大概是这样,scrollTop的距离可根据业务需求做调整