参考了一些大虾写的这方面代码,自己补充并加以整理,最终可以运用到项目中了,主要用途就是:
用脚本操作TEXTAREA(以下简称TA)的光标定位、光标位置插入文本、设置光标(或选取其中一段文本)、保存光标位置。。
代码如下:(如有雷同,那就有雷同吧。。)/*
*addTxtToCurPos方法可以在textarea光标位置插入文字
*@author nanpaibaye
*version 9-02-09
*/
var start=0;
var end=0;function addTxtToCurPos(oTextarea,sValue){
var pre = oTextarea.value.substr(0, start);
var post = oTextarea.value.substr(end);
oTextarea.value = pre + sValue + post;
var qLength = sValue.toString().length;
if(qLength > 1){
start = start + qLength;
end = end + qLength;
}
if(qLength = 1){
start ++;
end ++;
}
changeCurPosTo(oTextarea,start,end);
}function changeCurPosTo(qTextarea,qStart,qEnd){
if(isIE){
qTextarea.focus();
var range_all = qTextarea.createTextRange();
range_all.collapse(true);
range_all.moveStart('character', qStart);
range_all.select();
}
else{
setTimeout(function() {
qTextarea.setSelectionRange(qStart, qEnd);
qTextarea.focus();
}, 0);
}
start = qStart;
end = qEnd;
}function saveTextAreaCurPos(textBox,e){
if(typeof(textBox.selectionStart) == "number"){
start = textBox.selectionStart;
end = textBox.selectionEnd;
}
else if(document.selection){
var range = document.selection.createRange();
if(range.parentElement().id == textBox.id){
var range_all = document.body.createTextRange();
//range.collapse(true);
range_all.moveToElementText(textBox);
for (start=0; range_all.compareEndPoints("StartToStart", range) < 0; start++)
range_all.moveStart('character', 1);
for (var i = 0; i <= start; i ++){
if (textBox.value.charAt(i) == '\n')
start++;
}
var range_all = document.body.createTextRange();
range_all.moveToElementText(textBox);
for (end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; end ++)
range_all.moveStart('character', 1);
for (var i = 0; i <= end; i ++){
if (textBox.value.charAt(i) == '\n')
end ++;
}
}
}
}
function getSelectedText(textBox){
if(isIE){
var range_text = textBox.createTextRange().text;
}
else{
var range_text = textBox.value.substring(textBox.selectionStart,textBox.selectionEnd);
}
return range_text;
}纯属经验总结,在这里晾一下。。开放方便大家一起讨论、应用
用脚本操作TEXTAREA(以下简称TA)的光标定位、光标位置插入文本、设置光标(或选取其中一段文本)、保存光标位置。。
代码如下:(如有雷同,那就有雷同吧。。)/*
*addTxtToCurPos方法可以在textarea光标位置插入文字
*@author nanpaibaye
*version 9-02-09
*/
var start=0;
var end=0;function addTxtToCurPos(oTextarea,sValue){
var pre = oTextarea.value.substr(0, start);
var post = oTextarea.value.substr(end);
oTextarea.value = pre + sValue + post;
var qLength = sValue.toString().length;
if(qLength > 1){
start = start + qLength;
end = end + qLength;
}
if(qLength = 1){
start ++;
end ++;
}
changeCurPosTo(oTextarea,start,end);
}function changeCurPosTo(qTextarea,qStart,qEnd){
if(isIE){
qTextarea.focus();
var range_all = qTextarea.createTextRange();
range_all.collapse(true);
range_all.moveStart('character', qStart);
range_all.select();
}
else{
setTimeout(function() {
qTextarea.setSelectionRange(qStart, qEnd);
qTextarea.focus();
}, 0);
}
start = qStart;
end = qEnd;
}function saveTextAreaCurPos(textBox,e){
if(typeof(textBox.selectionStart) == "number"){
start = textBox.selectionStart;
end = textBox.selectionEnd;
}
else if(document.selection){
var range = document.selection.createRange();
if(range.parentElement().id == textBox.id){
var range_all = document.body.createTextRange();
//range.collapse(true);
range_all.moveToElementText(textBox);
for (start=0; range_all.compareEndPoints("StartToStart", range) < 0; start++)
range_all.moveStart('character', 1);
for (var i = 0; i <= start; i ++){
if (textBox.value.charAt(i) == '\n')
start++;
}
var range_all = document.body.createTextRange();
range_all.moveToElementText(textBox);
for (end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; end ++)
range_all.moveStart('character', 1);
for (var i = 0; i <= end; i ++){
if (textBox.value.charAt(i) == '\n')
end ++;
}
}
}
}
function getSelectedText(textBox){
if(isIE){
var range_text = textBox.createTextRange().text;
}
else{
var range_text = textBox.value.substring(textBox.selectionStart,textBox.selectionEnd);
}
return range_text;
}纯属经验总结,在这里晾一下。。开放方便大家一起讨论、应用
addTxtToCurPos(oTextarea,sValue)
//在TA的光标所在位置插入一段文本,sValue为文本,oTextarea为TA对象
changeCurPosTo(qTextarea,qStart,qEnd)
//脚本改变TA光标位置,qTextarea为TA对象,qStart为光标(或选区)起始位置,qEnd为光标(或选区)结束位置。
saveTextAreaCurPos(textBox,e)
//通过TA的事件记录当前光标位置,其值保存在两个全局变量start和end中。textBox为TA对象,保留e这个参数,实际上该方法中我并没有用到event,如有需求大家可以自己加进去。
getSelectedText(textBox)
//得到textBox(TA对象)所选择的文本。所需注意的是:
在控制光标等的时候,先要通过saveTextAreaCurPos获取当前textarea光标位置信息。