参考了一些大虾写的这方面代码,自己补充并加以整理,最终可以运用到项目中了,主要用途就是:
用脚本操作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;
}纯属经验总结,在这里晾一下。。开放方便大家一起讨论、应用

解决方案 »

  1.   

    应大家需要,这里放上简单注释:
    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光标位置信息。