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.對範圍進行操做
--------------------------------------------------------------------------------
示例1:
<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>
<input type="text" name="txtTest" value="明·羅貫中《三國演義》第二十一回 操曰:「夫英雄者,胸懷大志,腹有良謀,有包藏宇宙之機,吞吐天地之志者也。" size="100"><br>
移動光標到第<input type="text" name="txtNum" size="5">個位置
<input type="button" name="btnMove" value="移動" onclick="moveCursor()">
上面的例子實現了一個簡單的光標定位,涉及到了textRange的幾個方法
1.createTextRange()
建立一個TextRange對象,BODY、TEXT、TextArea、BUTTON等元素都支持這個方法。該方法返回一個TextRange對象。
2.move("Unit"[,count])
move()方法執行兩個操做。首先,方法在前一個結束點的位置重疊當前文檔,將這裏做爲一個插入點;下一步,它將插入點向前或向後移動任意個字符、單詞或句子單位。
方法的第一個參數是字符串,它指定的單位有character(字符)、word(詞)、sentence(段落)、textedit。textedit值將插入點移動到整個文本範圍的結束處(不須要參數)。若是指定爲前三種單位,忽略參數時默認值爲1,也能夠指定一個整數值來指示單元數,正數表明向前移動,負數表明向後移動。
注意在move()方法執行後範圍還是重疊的。
3.select()
select()方法選擇當前文本範圍內的文本,這裏的顯示光標也必須利用它來實現,由於所謂的"光標"能夠理解爲邊界重合的範圍
--------------------------------------------------------------------------------
示例2:
<script language="javascript">
function selectText(sp,ep)
{
if(isNaN(sp)||isNaN(ep))
{
alert("請輸入數字!");
return;
}
//弱語言自動轉換
sp = sp*1;
ep = ep*1;
if(sp>=ep)
{
alert("開始位置必須比結束位置小");
return;
}
if(sp>txtBox.value.length||ep>txtBox.value.length)
{
alert("當前字符數最大爲"+txtBox.value.length+",請從新輸入");
return;
}
var rng = this.txtBox.createTextRange();
//將開始點和結束點在容器起始位置重合
rng.moveStart("character",-txtBox.value.length);
rng.moveEnd("character",-txtBox.value.length);
rng.collapse(true);
//按參數值移動
rng.moveStart("character",sp);
rng.moveEnd("character",ep);
rng.select();
}
</script>
<textarea name="txtBox" rows="7" cols="50" id="txtBox">
千里以外
歌手:周杰倫/費玉清 專輯:依然范特西
屋檐如懸崖風鈴如滄海我等燕歸來
時間被安排演一場意外你悄然走開
故事在城外濃霧散不開看不清對白
你聽不出來風聲不存在是我在感慨
夢醒來是誰在窗臺把結局打開
那薄如蟬翼的將來經不起誰來拆
我送你離開千里以外你無聲黑白
沉默年代或許不應太遙遠的相愛
我送你離開天涯以外你是否還在
琴聲何來生死難猜用一輩子去等待
聞淚聲入林尋梨花白只得一行青苔
天在山以外雨落花臺我兩鬢斑白
聞淚聲入林尋梨花白只得一行青苔
天在山以外雨落花臺我等你來
</textarea><br>
指定選擇範圍:
<input type="text" size="5" id="txtStart">
-- <input type="text" size="5" id="txtEnd">
<input type="button" value="選擇" onclick="selectText(txtStart.value,txtEnd.value)">
上面的例子演示了利用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,在開始點重合:
--------------------------------------------------------------------------------
示例2:
<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>
5.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()方法返回包含文本範圍容器的引用
示例4:
<script>
function getParElem_r()
{
var rng = document.selection.createRange();
var container = rng.parentElement();
alert(container.tagName);
}
</script>
這是隻屬於Body的文本
<div>這是包含在div裏的文本</div>
<p>這是包含在p裏面的文本</p>html