通常在做前端Web界面时,经常需要用js模拟浏览器的查找功能。下面介绍下IE和Chrome浏览器中如何用js模拟该功能。
一、IE浏览器
在IE浏览器中我们需要用到TextRange对象,该对象主要用来在IE浏览器中查找文本。
如何创建该对象呢?
通常如果是在整个页面查找,只需调用方法document.body.createTextRange()即可。而如何是要在某一个对象内查找,例如:textArea,则需要调用docuemnt.getElementById('textAreaId').createTextRange()即可。
对象TextRange有两个比较重要的概念就是开始位置和结束位置,当我们创建完TextRange对象后,开始位置默认为整个查找域的起始位置,结束位置默认为整个查找域的结束位置。拿textArea举例来说就是整个textArea的开头和结尾。
当我们创建某个TextRange对象后,如何查找字符串呢?
我们需要用到TextRange对象的findText()方法,当我们调用查找方法后,该方法会不断的向下查找我们要查询的字符串,且开始位置和结束位置默认为当前查找到的字符串所在的开始位置和结束位置。当下一次查找逻辑运行时,会从当前的开头位置开始查找。
如何让浏览器选中我们查找到的字符串呢?
调用TextRange对象select()方法即可
当搜索的内容过多时,当前查找到的字符串可能不在可视范围内,如何让浏览器自动定位?
调用TextRange对象的scrollIntoView()方法可以滚动屏幕到合适位置
二、谷歌浏览器
谷歌浏览器中比较简单,只需要简单的调用window下的find方法即可。但是需要注意的是,如果需要循环查找,则需要多设置两个参数,如下所示:
window.find(searchValue,false,true);
三、完整实例代码如下:
//在整个文本中查找第几个,从0开始
var nextIndex = 0;
//上一次需要查找的字符串
var searchValue = '';
function findInPage(targetEle,searchText) {
//判断搜索字符是否为空
if (!searchText){
alert('搜索字符串为空');
}
//判断搜索条件是否已经改变
if(searchText && searchText != searchValue && nextIndex > 0){
searchValue = searchText;
nextIndex = 0;
}else{
searchValue = searchText;
}
if (document.all) {
txt = targetEle.createTextRange();
//搜索str
var found = '';
//查找第nextIndex个的字符串。之所以要用循环,是因为TextRange对象每次都是新生成的,所以查找初始位置每次都会还原。那么要查找第n次出现的字符串,就需要调用findText()方法多次,且每次查找都要重新设置开始位置和结束位置。
for (i = 0; i <= nextIndex && (found = txt.findText(searchValue))==true; i++) {
txt.moveStart("character", 1);
txt.moveEnd("textedit");
}
//选中本次查找的字符串
if (found) {
//这里设置为-1,表示为倒序查找。之所以要这样做,是因为此时我们已经查找到了第nextIndex出现的字符串,那么此时如果设置为倒序查找,且将开始位置设置为末尾,那么此时调用findText()方法查找,则会刚好查到我们上一次查到的字符串
txt.moveStart("character", -1);
txt.findText(searchValue);
txt.select();
//滚动屏幕到合适位置
txt.scrollIntoView();
nextIndex++;
}else{
//循环查找
if (nextIndex > 0) {
nextIndex = 0;
findInPage(searchValue);
}
}
}else{
//谷歌循环查找
window.find(searchValue,false,true);
}
}
分享到:
相关推荐
js禁止查看源文件屏蔽Ctrl+u_s、F12、右键等兼容IE火狐chrome.zip
枫树浏览器专门把网银等一些不支持chrome模式的网站添加为IE列表,这样打开这些网址的时候就会自动切换为IE模式来打开。用户也可根据 自己的需要添加其他网站为IE列表。 ●隐私保护 有三种方法: 第一种是在浏览...
针对标题提及的"如何让div+css兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器",这里将详细讨论一些关键的CSS兼容性问题及解决方案。 1. **DOCTYPE的影响**: DOCTYPE声明会影响浏览器进入何种文档模式。在HTML4或...
本文将深入探讨如何使CSS样式兼容IE6、IE7、IE8、IE9以及Firefox、Chrome等现代浏览器。 1. **DOCTYPE声明的影响**: DOCTYPE声明对于浏览器的渲染模式至关重要。在HTML文档的顶部加入正确的DOCTYPE,如`<!DOCTYPE...
由于不同的浏览器对 CSS 的支持及解析结果不一样,所以我们需要针对不同的浏览器写不同的 CSS 代码,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。 CSS Hack 的原理是什么? ----...
这次在项目中遇到了一个要做一个搜索功能,因为项目是vue的,而且是在手机端,所以对这个搜索功能的实现和能做到什么样子都没有底,在网上研究了一会,发现大家的解决方法都各有特色,有引入第三方包的,有遍历的,...
让 Div+CSS 兼容 IE6 IE7 IE8 IE9 和 FireFox Chrome 等浏览器 在前端开发中,让 Div+CSS 兼容不同的浏览器是一个很大的挑战。不同的浏览器有不同的渲染引擎和CSS解析规则,导致了同一份CSS代码在不同的浏览器中...
..如何让11div+css兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器.docx
..如何让11div+css兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器.pdf
模拟手机浏览器”是指一种特定的Chrome浏览器插件,它能够让用户在个人电脑(PC)上使用Chrome浏览器时,模拟成移动设备的浏览器环境,以访问那些只对手机浏览器开放的网站或功能。这种技术在网页开发、测试或者某些...
js前端复制+粘贴。亲测ie6+向上兼容,google等各大浏览器都兼容,代码简单
在本文中,我们将深入探讨如何使用SpringBoot与WebUploader实现大文件的切片上传功能,同时确保兼容性,包括对IE8+及Chrome等主流浏览器的支持。这一技术方案对于处理大容量文件上传,提高用户体验,以及优化服务器...
jsencrypt 兼容IE8,Chrome,FF,包括exports.default,Object.defineProperty不兼容问题处理等。
它具有全浏览器兼容性的特点,支持包括Chrome、IE(Internet Explorer)以及360浏览器在内的多种主流浏览器,极大地拓宽了其应用范围。Lodop控件以其强大的功能和简洁的API接口,使得开发者能够轻松地在网页中实现...
"JS导入导出Excel 兼容IE、Firefox、Chrome等浏览器"这一技术主题,聚焦于如何使用JavaScript(JS)在各种浏览器环境下处理Excel文件,包括古老的Internet Explorer(IE)、Firefox以及Chrome。下面我们将深入探讨这...
"JS日期选择器(兼容IE,FireFox,Oprea,chrome等主流浏览器)"是一个专门为JavaScript环境设计的,旨在解决跨浏览器兼容性问题的日期选择工具。这个组件的目标是确保在不同浏览器如Internet Explorer(IE)、Firefox、...
标题“Chrome浏览器打开IE”指的是在Google Chrome浏览器中利用特定的技术或插件来模拟或启动Microsoft Internet Explorer(简称IE)浏览器。这是因为某些网页或应用程序可能只兼容或设计为在IE中运行,而Chrome作为...
7. **浏览器兼容性**: 题目中提到了ie/ff/chrome,这意味着该解决方案考虑了Internet Explorer、Firefox和Chrome这三大主流浏览器的兼容性问题。对于老版本的IE,可能需要额外的适配代码来确保功能正常运行。 8. **...
"js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome"这个话题正是讨论如何通过JavaScript实现这些功能,以防止源代码被轻易查看或复制。下面我们将详细讲解相关的知识点。 首先,禁用键盘事件是其中一种...