如何监听Chrome/Firefox原生搜索并实现不同格式数值匹配?
问题:如何让浏览器原生搜索匹配格式化后的数值变体?
数值类内容常根据区域设置做格式化处理,比如1000000会显示为1,000,000,123456789这类EAN编码会显示为123 456 789。但用浏览器原生的CTRL+F搜索时,只能匹配页面上显示的子字符串——比如页面显示123 456时,用户输入12 34 56就无法匹配到目标内容。想请教有没有可行方案,能让原生搜索返回更多匹配结果?
可行解决方案
- 隐藏原始数值副本法:在每个显示格式化数值的元素旁边,添加一个绝对定位、移出可视区域的隐藏元素,里面存放未格式化的原始数值(比如页面显示
123 456,隐藏元素里放123456)。当用户搜索123456或者带任意空格分隔的变体时,浏览器会匹配到隐藏元素,再通过JS监听页面的搜索高亮事件,同步给对应的可见格式化元素添加高亮样式。 - 自定义搜索替代原生功能:禁用原生CTRL+F的默认行为(监听
keydown事件,判断CTRL+F组合键后阻止默认动作),自己实现搜索逻辑:- 拿到用户输入的搜索内容,先剔除所有非数字字符,得到纯数字序列;
- 遍历页面中所有格式化数值元素,提取它们的纯数字序列;
- 对比两者的纯数字序列,匹配的话就给对应元素添加高亮样式。
- 临时替换显示内容:通过监控页面的高亮元素变化(或自定义搜索框的
input事件),当检测到用户搜索时,临时把页面上的格式化数值替换成纯数字版本,搜索结束后再恢复原格式。不过这种方法可能影响页面布局,需要谨慎使用。
注意:浏览器没有提供直接监听原生CTRL+F搜索动作的API,以上都是通过间接方式实现类似需求。
内容的提问来源于stack exchange,提问作者mvorisek
相关产品推荐
相关产品推荐

