文章收藏-FAQ 位置:电脑学习网

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

//========================
//功能: 滚动文本框精确位置定位
//输入参数:
// 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://why100000.com]
     [版权声明:除本站部分特别声明禁止转载的专稿外,其他的文章可以自由转载,但请务必注明出处和原始作者。本站文章版权归文章原作者所有。如果本站转载的文章有版权问题请联系本站,我们会尽快予以更正。]
 

【字体:[大] [中] [小] 【加入收藏】 【发表评论】 【关闭本窗口】

Copyright © “十万个为什么”电脑学习网 2000-2007 陕ICP备06007929号
站务联系:MSN & Email:zhangking2008@gmail.com  QQ:9365822