(通用0bug)纯原生实现一个类似浏览器搜索功能(ctrl + f)

15 篇文章 0 订阅
6 篇文章 0 订阅

如果可以实现记得点赞分享,谢谢老铁~

先看下效果图

在这里插入图片描述

一、问题的描述

由于公司业务需要在搜索框中,
模拟 Ctrl + F 的搜索功能,支持自选可搜索区域范围,
且支持回车查看下一个,上下查看,自动滚动定位

帮助小白解决不会快捷键操作的搜索。

二、问题的解决方案

首先查看浏览器自带的 api 啥的,抱歉,没有,找不到~

三、先看下原来网站的效果

将原网站下载下来的脚本命名为 find5.js
直接引入,即可得到下面的搜索框效果

<script type="text/javascript" language="JavaScript" src="find5.js"></script>

在这里插入图片描述

基于一个网站,具体参考网址是:
链接: https://www.seabreezecomputers.com/tips/find5.htm
进行了二次封装。
非常感谢此网站的作者,让我看到了曙光,因为网上其他搜索组件各种奇形怪状的 bug 让我倍感难受。

四、接下来就是基于原网站二次封装的脚本(重要)

因为纯原生,所以支持各种框架(vue/react)等。 不用细看下面整个脚本,直接复制粘贴创建一个新的 new_find5.js 即可。先看下效果 : 且支持自适应换行

在这里插入图片描述

四、最后注意几点事项

这里的第一个参数是代表是否展示 label: ‘查看’,
第二个参数 是指定的区域进行搜索。默认是 body 整个网页
initFindWin(false, “contentMain”);

1.先在你的模块界面里先引入脚本,然后加入容器 div 且指定 id:findwindow
<div id="findwindow"></div>
<div id="contentMain">此处是你要搜索的内容</div>
2.如果是纯 js, 则只需要将 new_find5.js 最后一行代码注释且立即执行 initFindWin() 即可。

如果是 import 导入,请先 npm i find5 或 yarn add find5

老铁,麻烦点亮星星 https://gitee.com/coding_zxd/find5
3.如果是 vue, 这需要在 onMounted() 中调用,如
import initFindWin from "find5";
export default {
  setup() {
    onMounted(() => {
      // 这里的第一个参数是代表是否展示label: '查看', 第二个参数 是指定的区域进行搜索。默认是body 整个网页
      initFindWin(false, "contentMain");
    });
    return {};
  },
};
4.如果是 react + hooks, 则需要在 useEffect() 中调用
import initFindWin from "find5";
useEffect(() => {
  initFindWin(false, "contentMain");
}, []);

欢迎转载请说明来源即可

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
好的,下面是一个完整的JS原生实现穿梭框能够左右来回穿梭无bug的代码: HTML部分: ``` <div> <select id="left" multiple> <option value="1">选项1</option> <option value="2">选项2</option> <option value="3">选项3</option> <option value="4">选项4</option> <option value="5">选项5</option> </select> <button id="leftToRight">></button> <button id="rightToLeft"><</button> <select id="right" multiple> </select> </div> ``` JS部分: ``` var leftSelect = document.getElementById("left"); var rightSelect = document.getElementById("right"); var leftToRightBtn = document.getElementById("leftToRight"); var rightToLeftBtn = document.getElementById("rightToLeft"); leftToRightBtn.addEventListener("click", function() { for (var i = 0; i < leftSelect.options.length; i++) { var option = leftSelect.options[i]; if (option.selected) { rightSelect.appendChild(option); i--; } } }); rightToLeftBtn.addEventListener("click", function() { for (var i = 0; i < rightSelect.options.length; i++) { var option = rightSelect.options[i]; if (option.selected) { leftSelect.appendChild(option); i--; } } }); ``` 这段代码实现了将左侧的选项移动到右侧或者将右侧的选项移回到左侧。其中,左右两个select素都设置了multiple属性,表示可以多选。通过循环遍历左侧和右侧的选项,判断是否被选中,从而实现移动。由于在移动过程中会改变options的长度,因此需要在移动完成后将变量i减1,以防止漏掉某些选项。这样就可以实现一个简单的穿梭框了,而且没有bug

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端加油站

你遇到的坑将由我来踩

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值