发新话题
打印

如何选中滚动文本框从某一行到某一行

如何选中滚动文本框从某一行到某一行

//========================
//功能: 滚动文本框精确位置定位
//输入参数:
// 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)

TOP

发新话题