在指定的div中搜索内容,并滚动显示到当前搜索到的内容处
我想要的是页面中有个带滚动条的div对象,里面有很多内容,想要用js搜索到div中的某个字符串内容,然后将div的滚动条滚动到搜索到的内容处显示,自动定位。
先是查找页面中的内容,然后将找到的内容创建textRange,然后找到内容的上层容器对象,利用JQuery的功能,将这个上层窗口对象位置和div位置运算一下后,把div的滚动条滚动到这个容器位置。
//在指定的div对象中搜索内容,并定位滚动div的滚动条到搜索
//在整个文本中查找第几个,从0开始
var nextIndex = ;
//上一次需要查找的字符串
var searchValue = ''; function findInPage(searchText) { //在指定的div对象中搜索内容,并定位滚动div的滚动条到搜索内容位置显示
//判断搜索字符是否为空
if (!searchText) {
alert('请输入要搜索的内容');
return;
}
var textvalue = searchText;
var divObj = document.getElementById("div"); //判断搜索条件是否已经改变
if (searchText && searchText != searchValue && nextIndex > ) {
searchValue = searchText;
nextIndex = ;
} else {
searchValue = searchText;
} if (document.all) {
txt = document.body.createTextRange();
//搜索str
var found = '';
//查找第nextIndex个的字符串。之所以要用循环,是因为TextRange对象每次都是新生成的,所以查找初始位置每次都会还原。那么要查找第n次出现的字符串,就需要调用findText()方法多次,且每次查找都要重新设置开始位置和结束位置。
for (i = ; i <= nextIndex && (found = txt.findText(searchValue)) == true; i++) {
txt.moveStart("character", );
txt.moveEnd("textedit");
}
//选中本次查找的字符串
if (found) {
//这里设置为-1,表示为倒序查找。之所以要这样做,是因为此时我们已经查找到了第nextIndex出现的字符串,那么此时如果设置为倒序查找,且将开始位置设置为末尾,那么此时调用findText()方法查找,则会刚好查到我们上一次查到的字符串
txt.moveStart("character", -);
txt.findText(searchValue);
txt.select();
//滚动屏幕到合适位置
//txt.scrollIntoView(false);
var container = $(divObj);
var rng = document.selection.createRange();
var scrollTo = $(rng.parentElement());
//var scrollTo = $('#bfbf'); container.scrollTop(
scrollTo.offset().top - container.offset().top + container.scrollTop()
);
nextIndex++;
} else {
//循环查找
if (nextIndex > ) {
nextIndex = ;
findInPage(divObj, searchValue);
} else {
alert('没有搜索到“' + textvalue + '”');
}
}
} else {
//循环查找
window.find(searchValue, false, true);
}
}
在指定的div中搜索内容,并滚动显示到当前搜索到的内容处的更多相关文章
- IE8下div中2个button仅仅显示一个
IE8下div中2个button仅仅显示一个,代码例如以下: <div id="adviceType" style="display: none;" &g ...
- Div内部的内容超出部分显示省略号(仅仅只有一行内容)
效果如下:
- html如何让label在div中的垂直方向居中显示?
设置label的行高 line-height 和div的高度一致即可.
- listView获取item的Edit内容,listView中的edit内容在滚动时自动赋值了前面的内容
Today I am going to explain how to create a ListView with EditText and why will we need a TextWatche ...
- vc 在edit控件中动态插入数据滚动显示
内存从网上论坛摘抄整理 思路:给控件设置多行属性,设置垂直滚动条,Auto Vscroll设置为true,放入文本后把插入点设置到末尾 pEdit->LineScroll(pEdit->G ...
- bootstrap表格固定表头,表格内容滚动条滚动显示
直接贴代码--- <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- div中粘贴图片并上传服务器 div中拖拽图片文件并上传服务器
应用简介:此文主要是描述如何在前端div中直接ctrl+v 粘贴图片,并上传到服务器,包括拖拽图片文件到div中 应用场景描述:用QQ或者其它切图软件截图,在指定的div中ctrl+v 粘贴并显示,点 ...
- 如何让div中的文字只显示一行,多余的文字隐藏并加上省略号(超链接形式)
写页面的时候遇到了一个小小的问题,如何让div中一行超链接文字只显示一行,多余的文字隐藏并加上省略号,悬浮时隐藏的文字显示出来?解决问题时发现了css3的一个新标签 text-overflow , ...
- javascript怎么获取指定url网页中的内容
javascript怎么获取指定url网页中的内容 一.总结 一句话总结:推荐jquery中ajax,简单方便. 1.js能跨域操作么? javascript出于安全机制不允许跨域操作的. 二.用ph ...
随机推荐
- MySQL正则表达式
正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较. MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据. MySQL仅支持 ...
- iOS开发学习概述及知识整理
设计师设计出来了一个不错的引导界面,然而当我看到设计稿的时候,我们的app也没几天就要上线了.这个界面模仿了Evernote iOS app的风格. 我以迅雷不及掩耳盗铃之势开始在Xcode上编程,用 ...
- X3850M2安装CertOS 7 KVM
在旧的X3850中安装linux系统,研究KVM. 通过选择fedora和centos测试,最终选择centos7来安装. 先安装了一台,安装第二台时又出现第一台的问题,决定记录下来防止记忆出错. 1 ...
- freeCAD定制界面
由于freecad接口是基于现代Qt工具包,它非常先进.窗口,菜单,工具栏和其他工具都可以修改,移动工作台,共享,键盘快捷键都可以设置.修改,以及宏,它可以录制和播放.定制界面是访问Tools -&g ...
- 数据存储之CoreData
#import "ViewController.h" #import <CoreData/CoreData.h> #import "Person.h" ...
- MVC3之ViewData与ViewBag
首先先用代码来说话: ViewData: public ActionResult Index() { List<string> colors = new List<string> ...
- servlet(1)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- 第K大数
控制数据箱(box.c/cpp/pas)[题目大意]现在给你一个数据箱,支持以下操作,加入元素,第 n次查询操作求当前情况下的第 n 大数.比如说,第 3 次查询操作求第三小的数.当然查询操作的给出方 ...
- 将NSString转换成UTF8编码的NSString
在使用网络地址时,一般要先将url进行encode成UTF8格式的编码,否则在使用时可能报告网址不存在的错误,这时就需要进行转换 下面就是转换函数: NSString *urlString= [NSS ...
- MyEclipse 10.7.1 最新版官网下载地址
MyEclipse 10.7.1(Windows): http://downloads.myeclipseide.com/downloads/products/eworkbench/indigo/in ...