JavaScript中textRange物件使用方法總結
TextRange物件是動態HTML(DHTML)的高階特性,使用它可以實現很多和文字有關的任務,例如搜尋和選擇文字。文字範圍讓您可以選擇性的將字元、單詞和句子從文件中挑選出來。TextRange物件是在HTML文件將要顯示的文字流上建立開始和結束位置的抽象物件。
下面是TextRange的常用屬性與方法:
屬性
- boundingHeight 獲取繫結TextRange物件的矩形的高度
- boundingLeft 獲取繫結TextRange 物件的矩形左邊緣和包含TextRange物件的左側之間的距離
- offsetLeft 獲取物件相對於版面或由offsetParent屬性指定的父座標的計算左側位置
- offsetTop 獲取物件相對於版面或由offsetParent屬性指定的父座標的計算頂端位置
- htmlText 獲取繫結TextRange物件的矩形的寬度
- text 設定或獲取範圍內包含的文字
方法
- moveStart 更改範圍的開始位置
- moveEnd 更改範圍的結束位置
- collapse 將插入點移動到當前範圍的開始或結尾
- move 摺疊給定文字範圍並將空範圍移動給定單元數
- execCommand 在當前文件、當前選中區或給定範圍上執行命令
- select 將當前選擇區置為當前物件
- findText 在文字中搜尋文字並將範圍的開始和結束點設定為包圍搜尋字串。
使用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>
上面的例子演示了利用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>
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>
相關文章
- JavaScript遍歷物件方法總結JavaScript物件
- JavaScript 物件深入學習總結JavaScript物件
- javascript的物件問題及總結JavaScript物件
- 物件導向(理解物件)——JavaScript基礎總結(一)物件JavaScript
- JavaScript中this指向的總結JavaScript
- STM32 外部中斷使用方法總結
- casperjs中start方法的使用方法總結JS
- RAC 使用方法總結
- Javascript 筆記與總結(2-4)Javascript 內建物件JavaScript筆記物件
- JavaScript陣列方法總結(中)JavaScript陣列
- JavaScript 中 this 的使用技巧總結JavaScript
- javascript中!=、!==、==、===操作符總結JavaScript
- Java中request物件常用方法總結Java物件
- JavaScript學習總結(二)陣列和物件部分JavaScript陣列物件
- JavaScript 建立物件與繼承總結和回顧JavaScript物件繼承
- JavaScript裡的陣列Array使用方法總結,超全的oJavaScript陣列
- Retrofit使用方法全面總結
- javascript ES5 物件導向的學習總結JavaScript物件
- Git和github使用方法總結Github
- Date物件總結物件
- C++中list的使用方法及常用list操作總結C++
- 物件導向中Object常用屬性總結物件Object
- 磁帶裝置使用方法總結
- Windows RocketMQ使用方法經驗總結WindowsMQ
- javascript Date 總結JavaScript
- Javascript事件總結JavaScript事件
- JavaScript 技巧總結JavaScript
- SpringAop中JoinPoint物件的使用方法Spring物件
- JavaScript中call,apply,bind方法的總結。JavaScriptAPP
- 總結下 javascript 中的一些小技巧JavaScript
- JavaScript中call,apply,bind方法的總結JavaScriptAPP
- JS 總結之物件JS物件
- 關聯物件總結物件
- [物件導向總結]物件
- JavaScript中的Array物件JavaScript物件
- javascript圍觀IE10中window物件的結構JavaScriptIE10物件
- ORACLE常用結構和函式使用方法總結Oracle函式
- Javascript中的Form表單知識點總結JavaScriptORM