江西广告网
标题:
如何选中滚动文本框从某一行到某一行
[打印本页]
作者:
萤火虫
时间:
2008-12-30 11:14
标题:
如何选中滚动文本框从某一行到某一行
//======================== //功能: 滚动文本框精确位置定位 //输入参数: // self 滚动文本框对象 // _startLine 开始行数 // _endLine 结束行数 // _startPoint 开始行数的开始位置 // _endPoint 结束行数的结束位置 //调用方法: // ①同一行,从开始位置到结束位置: // selToLinePoint(self, 2, 2, 0/1, 0) // ②不同一行,从某一开始位置到结束位置: // selToLinePoint(self, 2, 4, 3, 0) // ③不同一行,从某一开始位置到某一结束位置: // selToLinePoint(self, 2, 4, 3, 9) //======================== function selToLinePoint(self, _startLine, _endLine, _startPoint, _endPoint, _len){ var src = self; var oTR = self.createTextRange(); var text = self.innerText; var textLength = text.length; conts = [0]; 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) var _oTR_Line_Length = oTR.text.length; cont = textLength - _oTR_Line_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 (_endLine == "") _endLine = _startLine; _startLine = parseInt(_startLine); _endLine = parseInt(_endLine); if (isFinite(_startLine) && isFinite(_endLine) && _startLine > 0 && _endLine > 0){ //检查参数有效性 if (_startLine > conts.length || _endLine > conts.length){ alert("总共只有" conts.length "行,请检查后重试。"); return; } //如果结束行在开始行之前,强行调整参数 if (_endLine < _startLine){ _endLine = _startLine; end.value = _endLine; } src.scrollTop = 0; oTR.moveToPoint(startx, starty); //光标回到textarea内容的开头 st = conts[_startLine - 1]; if (st > _startPoint){ st = st _startPoint; }else{ var _rightTextLen = 0; for (var m = 0; m < conts.length; m ){ if (conts[m] < _startPoint){ _rightTextLen = _startPoint - conts[m]; st = _startPoint - _rightTextLen; if (_endLine == _startLine){ _endLine ; } }else{ break; } } if (st _rightTextLen < textLength){ st = st _rightTextLen; } } texpreStart = text.substr(0, st); texpreStart = text.substr(0, st).replace(/\r/g, ""); //自textarea内容的开头至选择起点前的字串,由于moveStart方法将\r\n视为一个字符,需要修正计数 st = texpreStart.length; oTR.moveStart("character", st); en = textLength; if (_endLine < conts.length){ en = conts[_endLine]; if (_endPoint > 0){ var laLineLen = conts[_endLine] - conts[_endLine -1]; en = en - laLineLen _endPoint; } } texpreEnd = text.substr(0, en).replace(/\r/g,"") //自textarea内容的开头至选择结束点前的字串,由于moveEnd方法将\r\n视为一个字符,需要修正计数 en = texpreEnd.length var _endX = en - st; oTR.moveEnd("character", _endX); oTR.select(); } }
欢迎光临 江西广告网 (http://bbs.jxadw.com/)
Powered by Discuz! X3.2