JavaScript選擇第幾行至第幾行內容

來源:互聯網
上載者:User

<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>

 

相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.