比较深入的认识一下textrange

本文介绍了如何利用TextRange对象进行各种文本操作,包括获取页面文本、实现文本框内的光标定位与控制、文本的选择及插入等实用技巧。

textrange是一个很有用的玩意,今天仔细研究了一下,弄了几个典型的例子,估计都是有可能被用到的情形。

直接拷贝下面的代码到一个html文件就可以运行测试。写的比较粗。

参考了1篇比较好的文章:http://blog.sina.com.cn/s/blog_4b8d35b70100a047.html~type=v5_one&label=rela_nextarticle

document.body.createTextRange().text得到当前页面的纯文本。<br>
document.body.createTextRange().htmlText得到当前页面的html文本。<br>
<script>
 document.body.onload = function(){
  //alert(document.body.createTextRange().text);
  //alert(document.body.createTextRange().htmlText);
 };
</script>
<hr>
rnga.inRange(rngb) 将测试rngb是否在rnga中<br>
<input id="inp1" type="text" value="1234567890">
<input id="inp2" type="text" value="9876543210">
<input type="button" onclick="test()" value="看看你当前选择的内容是否是第一个输入框中"><br><br>
<script language="javascript">
 function test(){
  var o=document.getElementById("inp1")
  var r = document.selection.createRange();
  alert(r.text);
  if(o.createTextRange().inRange(r))
  alert(r.text);
 }
</script>
<br>
<hr>
页面文本倒序查找<br>
<input value="倒序查找a" onclick=myfindtext("a") type="button" />
<script language='javascript'>
 var rng = document.body.createTextRange();
 function myfindtext(text){
  rng.collapse(false);
  if(rng.findText(text,-1,1)){
   rng.select();
   rng.collapse(true);
  }
  else{
   alert("end");
  }
 }
</script>
<hr>
<br>
得到文本框内光标位置<br>
<script language="javascript">
function getPos(obj){
obj.focus();
var s=document.selection.createRange();
s.setEndPoint("StartToStart",obj.createTextRange())
alert(s.text.length);
}
</script>
<input type="text" id="txt1" value="1234567890">
<input type="button" value="得到光标位置" onclick=getPos(txt1)>
<hr>
控制input框内光标位置<br>
<script language="javascript">
 function setPos(num){
  var e =document.getElementById("text1");
  var r =e.createTextRange();
  r.moveStart('character',num);
  r.collapse(true);
  r.select();
 }
</script>
<input type="text" id="text1" value="1234567890">
<select onchange="setPos(this.selectedIndex)">
<option value="0">0</option>
<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>
<option value="6">6</option>
<option value="7">7</option>
</select>
<hr>
选中文本框中的一段文字<br>
<script language=javascript>
 function sel(id,num){
  var obj = document.getElementById(id);
  var rng=obj.createTextRange();
  var sel = rng.duplicate();
  sel.moveStart("character", num);
  sel.setEndPoint("EndToStart", rng);
  sel.select();
 }
</script>
<input type="text" id="text11" value="1234567890">
<select onchange="sel('text11',this.value)">
<option value="0">0</option>
<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>
<option value="6">6</option>
<option value="7">7</option>
</select>
<hr>
控制文本框内光标的移动<br>
<input type="button" value="<-" onclick=go(-1)>
<input id="word" value="这里是文字1234567890">
<input type="button" value="->" onclick=go(1)>
<script language="javascript">
 function go(n){
  word.focus();
  with(document.selection.createRange()){
   moveStart("character",n);
   collapse();
   select();
  }
 }
 go(6);
</script>
<hr>
document.selection.createRange().text得到被选择的文本的内容<br>
<textarea cols=50 rows=15>
 hello,dfdsfsf;ajthisf ;aslfjds;alfjas;flkdsjf;slfjd 1
 hello,dfdsfsf;ajthisf ;aslfjds;alfjas;flkdsjf;slfjd 2
</textarea>
<div>hello,dfdsfsf;ajthisf ;aslfjds;alfjas;flkdsjf;slfjd 3<div>
<input type=button value='Get the selected words' onclick=alert(document.selection.createRange().text)>
<hr>
还可以把代码写的更通用一点<br>
<script>
 function getSel(){
    var t=window.getSelection?window.getSelection():(
     document.getSelection?document.getSelection():(
      document.selection?document.selection.createRange().text:""))
    document.getElementById('selectedtext').value = t;
 }
 document.onmouseup = getSel;
</script>
<textarea id="selectedtext" name="selectedtext" rows="5" cols="50"></textarea>
<hr>
下面的代码将演示如何选择一部分文本<br>
<SCRIPT   LANGUAGE="JavaScript">  
   function   test2(){
   var   t=document.getElementById("test1");
   var   o=t.createTextRange();
   alert(o.text);
   o.moveStart("character",2); 
   alert(o.text);
   o.select();
  } 
</SCRIPT>
<input type='text' id='test1' name='test1' value="1234567890">
<input type="button" onclick='test2()' value='Click Me' name='test3'>
<br>
please try to select some text in this page, you will see <a href="">this is a test link</a> that
the text content will be copyed into the textarea without html tag.
document.selection.createRange().text??document.selection.createRange().htmlText
<hr>
下面代码演示如何在光标位置插入字符<br>
<script language="javascript" type="text/javascript">
 function insertText(text){
  document.getElementById("demo2").focus();
  document.selection.createRange().text+=text;
  document.getElementById("demo2").blur();
 }
</script>
<input id="demo2" type="text" value="123456789">
<input type="button" onclick="insertText('111111')" value="在左边的输入框插入字符">
<hr>
下面的代码演示把光标移动到末尾<br>
<input type="text" id="tt" value="12345678901234567890" />
<input type="button" value="光标移动到末尾" onclick="moveCursorToEnd('tt')" />
<script>
 function moveCursorToEnd(obj){
  var o = document.getElementById(obj);
  if(o==null){
     o=event.srcElement;
  }
  var rtextRange =o.createTextRange();
  rtextRange.moveStart('character',o.value.length);
  rtextRange.collapse(true);
  rtextRange.select();
 }
 //moveCursorToEnd("tt");
</script>

http://blog.chinaunix.net/u/14250/showart_102441.html

http://blog.sina.com.cn/s/blog_4b8d35b70100a047.html~type=v5_one&label=rela_nextarticle

在文本处理和编辑器开发中,`TextRange` 是一个常见的概念,通常用于表示文档中的一段文本范围。它可以用来执行诸如查找、替换、高亮显示、格式化等操作。`TextRange` 的具体实现和用法会根据不同的开发框架或编辑器环境而有所不同。 例如,在某些文本编辑器的 API 中,`TextRange` 可以通过指定起始和结束位置来标识文档中的特定文本区域,并允许对该区域执行进一步的操作。这种功能在自动化脚本、代码分析工具以及富文本编辑器中尤为常见。 ### `TextRange` 的典型用途 - **查找与替换**:`TextRange` 可用于标识文本中某个特定字符串的首次出现位置,从而支持查找与替换操作。例如,在某个文本编辑器的扩展功能中,可以通过指定起始索引,查找下一个匹配的字符串,并返回一个 `TextRange` 对象来标识该匹配项[^1]。 - **文本格式化**:通过 `TextRange`,可以对文档中的特定部分应用格式,如设置字体、颜色、加粗、斜体等。 - **内容提取与修改**:`TextRange` 支持从文档中提取特定范围的文本内容,或者用新的内容替换该范围的文本。 ### 示例 API 使用(基于通用编辑器模型) 以下是一个伪代码风格的 `TextRange` 使用示例,假设我们正在使用一个支持 `TextRange` 的文本编辑器 API: ```python # 获取当前文档的文本范围对象 text_range = editor.document.get_text_range() # 从指定索引开始查找某个字符串 start_index = 0 search_string = "example" match_range = text_range.find(search_string, start_index) if match_range: # 找到匹配项,选中该范围 editor.selection.set_range(match_range) # 替换匹配文本 replacement_text = "replacement" match_range.text = replacement_text ``` 在实际开发中,`TextRange` 的具体方法和属性取决于所使用的框架。例如,在 Microsoft 的文本对象模型(如 Word 或 Visual Studio 的扩展 API)中,`TextRange` 提供了丰富的方法来操作文档内容。 ### `TextRange` 与文本编辑器架构的关系 在像 SciTE 这样的轻量级编辑器中,虽然没有直接暴露 `TextRange` 类型,但其底层机制支持类似的文本范围操作,尤其是在使用脚本语言(如 Lua)进行扩展时。例如,当打开一个新缓冲区时,脚本可能需要重新加载以适应新的上下文,这可能会影响对文本范围的处理方式[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值