注册
 找回密码
 注册
江西广告网
查看: 300|回复: 0
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2008-12-30 11:14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
//======================== //功能: 滚动文本框精确位置定位 //输入参数: // 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(); } }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表