JavaScript中textRange對象使用方法總結

ew45 9年前發布 | 13K 次閱讀 JavaScript開發 JavaScript

TextRange對象是動態HTML(DHTML)的高級特性,使用它可以實現很多和文本有關的任務,例如搜索和選擇文本。文本范圍讓您可以選擇性的將字符、單詞和句子從文檔中挑選出來。TextRange對象是在HTML文檔將要顯示的文本流上建立開始和結束位置的抽象對象。

下面是TextRange的常用屬性與方法:

屬性

  • boundingHeight 獲取綁定TextRange對象的矩形的高度
  • boundingLeft 獲取綁定TextRange 對象的矩形左邊緣和包含TextRange對象的左側之間的距離
  • offsetLeft 獲取對象相對于版面或由offsetParent屬性指定的父坐標的計算左側位置
  • offsetTop 獲取對象相對于版面或由offsetParent屬性指定的父坐標的計算頂端位置
  • htmlText 獲取綁定TextRange對象的矩形的寬度
  • text 設置或獲取范圍內包含的文本
  • </ul>

    方法

    • moveStart 更改范圍的開始位置
    • moveEnd 更改范圍的結束位置
    • collapse 將插入點移動到當前范圍的開始或結尾
    • move 折疊給定文本范圍并將空范圍移動給定單元數
    • execCommand 在當前文檔、當前選中區或給定范圍上執行命令
    • select 將當前選擇區置為當前對象
    • findText 在文本中搜索文本并將范圍的開始和結束點設置為包圍搜索字符串。
    • </ul>

      使用TextRange對象通常包括三個基本的步驟:

      1.創建文本范圍

      2.設置開始點和結束點

      3.對范圍進行操作

      <script language="javascript">  
      function moveCursor()  
      {  
          var temp = this.txtNum.value;   
          if(isNaN(temp))  
          {  
           alert("請輸入一個數字");  
           return;  
          }  
          var rng = this.txtTest.createTextRange();  
          rng.move("character",temp);  
          rng.select();     
      }   
      </script>  
      </HEAD>  
      <BODY>  
      <input type="text" name="txtTest" value="明·羅貫中《三國演義》第二十一回 操曰:“夫英雄者,胸懷大志,腹有良謀,有包藏宇宙之機,吞吐天地之志者也。" size="100"><br>  
      移動光標到第<input type="text" name="txtNum" size="5">個位置  
      <input type="button" name="btnMove" value="移動" onclick="moveCursor()">   
      </BODY>

      1.createTextRange()

      創建一個TextRange對象,BODY、TEXT、TextArea、BUTTON等元素都支持這個方法。該方法返回一個TextRange對象。

      2.move(”Unit”[,count])

      move()方法執行兩個操作。首先,方法在前一個結束點的位置重疊當前文檔,將這里作為一個插入點;下一步,它將插入點向前或向后移動任意個字符、單詞或句子單位。

      方法的第一個參數是字符串,它指定的單位有character(字符)、word(詞)、sentence(段落)、textedit。 textedit值將插入點移動到整個文本范圍的結束處(不需要參數)。如果指定為前三種單位,忽略參數時默認值為1,也可以指定一個整數值來指示單元 數,正數代表向前移動,負數代表向后移動。

      注意在move()方法執行后范圍仍是重疊的。

      3.select()

      select()方法選擇當前文本范圍內的文本,這里的顯示光標也必須利用它來實現,因為所謂的”光標”可以理解為邊界重合的范圍

      <BODY>
      <textarea name="txtBox" rows="7" cols="50" id="txtBox">
      菊花臺 (滿城盡帶黃金甲主題曲)
      歌手:周杰倫 專輯:依然范特西

      你的淚光 柔弱中帶傷
      慘白的月彎彎 勾住過往
      夜太漫長 凝結成了霜
      是誰在閣樓上冰冷的絕望
      雨輕輕淌 朱紅色的窗
      我一生在紙上 被風吹亂
      夢在遠方 化成一縷霞
      隨風飄散 你的模樣

      菊花慘淡地傷 你的笑容已泛黃
      花落人斷腸 我心事靜靜淌
      北風亂夜未央 你的影子剪不斷
      徒留我孤單在湖面生霜
      </textarea><br>
      <input type="text" value="輸入要查詢的內容" id="txtFind">
      <input type="button" value="查找下一個" onclick="findText(txtFind.value)">
      <script language="javascript">
      var rng = txtBox.createTextRange();
      function findText(str)
      {
         if(str=="")
         return;
         //定義一個變量,作為moveStart()函數的偏移量,即開始點跳過選擇文本
         var num = 0;
         if(document.selection)  
         num = document.selection.createRange().text.length;
         //每次調用函數,結束點都為末尾,而開始點是跳過選擇文本后的新開始點
         rng.moveStart("character",num);
         rng.moveEnd("character",txtBox.value.length);
         //搜索到后選擇文本  
         if(rng.findText(str))
         rng.select();
         //搜索到最后的范圍還是找不到,則提示搜索完畢,并重新恢復rng最初的范圍(否則無法執行新搜索)  
         if(rng.text!=str)
         {  
         alert("搜索完畢");
         rng = txtBox.createTextRange();
         }
      }  
      </script>
      </BODY></pre>

      上面的例子演示了利用moveStart()和moveEne()方法選擇范圍,出現的幾個方法的說明如下:

      4.moveStart(”Unit”[,count])與moveEnd(”Unit”[,count])

      moveStart()與moveEnd()方法類似于move()方法,默認情況下開始點為容器第一個字符、結束點為最后一個字符

      我們可以修改上面的selectText()函數來證明:

      function selectText() 
      { 
        var rng = txtBox.createTextRange(); 
        rng.moveStart("character",1); 
        rng.moveEnd("character",-1); 
        rng.select(); 
      }

      將開始點向前移動一個字符、結束點向后移動一個字符,運行后可以看到選擇的范圍是除第1個字符和最后1個字符的整個文本范圍。

      5.collapse([Boolean])

      可以用collapse()方法把文本范圍從當前尺寸重疊成字符間的單個插入點。collapse()方法的可選參數是Boolean值,它指出范圍是在當前范圍的開始點重合,還是結束點重合。默認值為true,在開始點重合:

      6.findText(”searchString”[,searchScope,flags])

      TextRange對象最有用的方法之一是findText()方法,其默認行為是從開始點到結束點瀏覽文本范圍,搜索一個不區分大小寫的字符串 匹配。如果在范圍中發現一個實例,范圍的開始點和結束點就放到這個文本中,方法返回true;否則返回false,開始點和結束點都不動。方法僅搜索顯示 文本,而任何標記或屬性都不會被搜索。

      可選參數searchScope是一個整數值,它指示從開始點的字符數,值越大,包含在搜索范圍的文本越多;負值將迫使搜索操作從當前開始點向后搜索。

      可選參數flag用來設置搜索是否區分大小寫,或者是否僅匹配整個單詞。參數是整數值,它用按位組合的數學方法計算單個值,這些值能容納一個或多 個設置。匹配整個單詞的值為2;匹配大小寫的值為4;如果只想匹配一項,則只提供希望的值就夠了,但對于兩種行為,要用位操作XOR操作符(^操作符)使 值為6。

      findText()方法最常用的應用包括范圍中的查找和替換操作,以及格式化一個字符串的實例,因為搜索通常以范圍的當前開始點開始,所以再次 查詢要將開始點移到范圍中匹配文本的末尾(如示例3),移動后才能使findText()繼續瀏覽剩下的文本范圍,來查找另一個匹配。可以使用 collapse(false)方法迫使開始點移動第一個匹配的范圍的結束點。所以示例3的findText()函數也可以修改為:

      <script language="javascript">

      var rng = txtBox.createTextRange();

      function findText(str) {    if(str=="")    return;

         if(rng.findText(str))    {    rng.select();    rng.collapse(false);    }    //搜索到最后的范圍還是找不到,則提示搜索完畢,并重新恢復rng最初的范圍(否則無法執行新搜索)      else    {      alert("搜索完畢");    rng = txtBox.createTextRange();    } }  

      </script></pre>

      6.parentElement()

      parentElement()方法返回包含文本范圍容器的引用

      獲得光標選中文本的DOM對象

      <script>
      function getParElem()
      {
      var rng = document.selection.createRange();
      var container = rng.parentElement();
      //alert(container.getAttribute("id")||container.getAttribute("value")||container.getAttribute("type"));
      alert(container.tagName);
      }
      </script>
      </HEAD>

      <BODY>

      這是只屬于Body的文本
      <div>這是包含在div里的文本</div>
      <p>這是包含在p里面的文本</p>
      <div><strong>這是包含在div->strong里的文本</strong></div>
      <input type="button" value="選擇文本后點擊" onClick="getParElem()">
      </BODY></pre>來源:投稿

 本文由用戶 ew45 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!