JavaScript中textRange對象使用方法小結

來源:互聯網
上載者:User

 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()方法最常執行的 App包括範圍中的尋找和替換操作,以及格式化一個字串的執行個體,因為搜尋通常以範圍的當前開始點開始,所以再次 查詢要將開始點移到範圍中匹配文本的末尾(如樣本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>
相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。