网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  如何选中滚动文本框从某一行到某一行     
  文章作者:未知  文章来源:水木森林  
  查看:61次  录入:管理员--2007-11-17  
 

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

 
 
上一篇: 获取滚动文本框textarea焦点位置信息    下一篇: 编程基础:java中的数据结构
  相关文档
开发者:我们应该在哪个层次编写代码? 09-05
java程序员就业前景 11-17
敏捷开发技巧-消除代码异味 11-17
一个 jdbc 连接池例子 11-17
提取英文中的单词 11-17
使用 jakarta commons 之库组件攻略 11-17
利用java技术编写桌面软件基础 11-17
midp1.0-五子棋1.1读后的修改 11-17
java程序员必读:基础篇(2.a)语言基础 11-17
使用缓冲提高输入/输出的性能 11-17
java的网络功能与编程4 11-17
java基础知识:简单hibernate入门 11-17
maven 专题之一 11-17
j2ee基础:session机制使用的详细讲解 11-16
jsp/servlet/jsf:提升jsp应用程序效率 01-11
创造一种迅速而又随性的(quick and dirty)xml解释器 11-17
用java applet保护网页的缺陷 11-17
java数据库编程中的基本步骤和常用技巧 11-16
ultraedit+weblogic实体bean 实例学习 11-17
java高级编程——泛型类型第一部分 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息