<textarea rows=5 cols=30 id=abc>
祖父聽說我要帶女朋友去釣魚,也想去會會她。我帶了女朋友先去,等候祖父的時候,我已釣到了一條18公斤重的鱸魚。
祖父到了,我把女友介紹給他認識,又舉起那條魚給他看。
真不錯!他說,怎樣釣上的?
用蚯蚓。我回答。
那就奇了,他故意一本正經地說,
我那一代至少要用一頓飯和一場電影!</textarea>
<script language=JScript>
/*
Create by Bound0 on Blueidea
mailto:bound0eureka@gmail.com
*/
function sele(s,e){
var src = document.getElementById("abc")
var oTR = src.createTextRange()
var text=src.innerText
var textLength = text.length
conts=[0]
/* 我一開始不知道getClientRects()方法,就用這段代碼取textarea內容開始處在網頁中的大致座標,可見條條大路通羅馬
Obj=src
for (var sumTop=0,sumLeft=0;Obj!=window.document.body;sumTop+=Obj.offsetTop,sumLeft+=Obj.offsetLeft, Obj=Obj.offsetParent);
startx=sumLeft+6 //textarea內容開始處在網頁中的大致座標
starty=sumTop+9
*/
startx=src.createTextRange().getClientRects()[0].left
starty=src.createTextRange().getClientRects()[0].top
stepy=3 //游標向下移動的步長,不能大於textarea中的字高
currentScr=0 //當前捲軸位置
stepScr=30 //捲軸向下滾動的步長,不能大於textarea的高度
while(1){src.scrollTop=currentScr
currenty=starty
while(1) //游標從textarea內容的開頭開始向下移動,遍曆各行,在conts[]中記下各換行位置
{oTR.moveToPoint(startx, currenty)
oTR.moveEnd("character", textLength)
cont = textLength - oTR.text.length
if(cont>=textLength)break
if(cont>conts[conts.length-1])conts[conts.length]=cont
currenty+=stepy
}
if(currentScr>=src.scrollHeight)break
currentScr+=stepScr
}
if(e=="")e=s
s=parseInt(s)
e=parseInt(e)
if(isFinite(s)&&isFinite(e)&&s>0&&e>0){if(s>conts.length||e>conts.length){alert("總共只有"+conts.length+"行。") //檢查參數有效性
return}
if(e<s){e=s;end.value=e} //假如結束行在開始行之前,強行調整參數
src.scrollTop=0
oTR.moveToPoint(startx,starty) //游標回到textarea內容的開頭
st=conts[s-1]
texpreStart=text.substr(0,st).replace(/\r/g,"") //自textarea內容的開頭至選擇起點前的字串,由於moveStart方法將\r\n視為一個字元,需要修正計數
st=texpreStart.length
oTR.moveStart("character",st)
en=textLength
if(e<conts.length)en=conts[e]
texpreEnd=text.substr(0,en).replace(/\r/g,"") //自textarea內容的開頭至選擇結束點前的字串,由於moveEnd方法將\r\n視為一個字元,需要修正計數
en=texpreEnd.length
oTR.moveEnd("character", en-st)
oTR.select()
}
}
</script>
選中第<input name=start value=3>行至第<input name=end value=5>行
<button onclick=sele(start.value,end.value)>select</button>