问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

我的textarea点击一下,写字的光标就在中间部位,怎么把光标移到前面去?

发布网友 发布时间:2022-04-21 06:00

我来回答

1个回答

热心网友 时间:2023-11-06 05:24

Javascript设置和获取Textarea的光标位置的方法,可定位光标到某个位置:

<html><head>  
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />  
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
<title>JS设置及获取Textarea的光标位置</title>  
 <script>  
   var isIE = !(!document.all);  
   function posCursor(){  
     var start=0,end=0;  
     var oTextarea = document.getElementById("textarea");  
     if(isIE){  
       //selection 当前激活选中区,即高亮文本块,和/或文当中用户可执行某些操作的其它元素。  
       //createRange 从当前文本选中区中创建 TextRange 对象,  
       //或从控件选中区中创建 controlRange 集合。  
       var sTextRange= document.selection.createRange();  
 
       //判断选中的是不是textarea对象  
       if(sTextRange.parentElement()== oTextarea){  
         //创建一个TextRange对象  
         var oTextRange = document.body.createTextRange();  
         //移动文本范围以便范围的开始和结束位置能够完全包含给定元素的文本。  
         oTextRange.moveToElementText(oTextarea);  
           
         //此时得到两个 TextRange  
         //oTextRange文本域(textarea)中文本的TextRange对象  
         //sTextRange是选中区域文本的TextRange对象  
     
         //compareEndPoints方法介绍,compareEndPoints方法用于比较两个TextRange对象的位置  
         //StartToEnd  比较TextRange开头与参数TextRange的末尾。  
         //StartToStart比较TextRange开头与参数TextRange的开头。  
         //EndToStart  比较TextRange末尾与参数TextRange的开头。  
         //EndToEnd    比较TextRange末尾与参数TextRange的末尾。  
     
         //moveStart方法介绍,更改范围的开始位置  
         //character 按字符移动  
         //word       按单词移动  
         //sentence  按句子移动  
         //textedit  启动编辑动作  
     
         //这里我们比较oTextRange和sTextRange的开头,的到选中区域的开头位置  
         for (start=0; oTextRange.compareEndPoints("StartToStart", sTextRange) < 0; start++){  
           oTextRange.moveStart('character', 1);  
         }  
         //需要计算一下\n的数目(按字符移动的方式不计\n,所以这里加上)  
         for (var i = 0; i <= start; i ++){  
           if (oTextarea.value.charAt(i) == '\n'){  
             start++;  
           }  
         }  
     
         //再计算一次结束的位置  
         oTextRange.moveToElementText(oTextarea);  
         for (end = 0; oTextRange.compareEndPoints('StartToEnd', sTextRange) < 0; end ++){  
           oTextRange.moveStart('character', 1);  
         }  
         for (var i = 0; i <= end; i ++){  
           if (oTextarea.value.charAt(i) == '\n'){  
             end++;  
           }  
         }  
       }  
     }else{  
       start = oTextarea.selectionStart;  
       end = oTextarea.selectionEnd;  
     }  
     document.getElementById("start").value = start;  
     document.getElementById("end").value = end;  
   }  
     
     
   function moveCursor(){  
     var oTextarea = document.getElementById("textarea");  
     var start = parseInt(document.getElementById("start").value);  
     var end =  parseInt(document.getElementById("end").value);  
     if(isNaN(start)||isNaN(end)){  
       alert("位置输入错误");  
     }  
     if(isIE){  
       var oTextRange = oTextarea.createTextRange();  
       var LStart = start;  
       var LEnd = end;  
       var start = 0;  
       var end = 0;  
       var value = oTextarea.value;  
       for(var i=0; i<value.length && i<LStart; i++){  
         var c = value.charAt(i);  
         if(c!='\n'){  
           start++;  
         }  
       }  
       for(var i=value.length-1; i>=LEnd && i>=0; i--){  
         var c = value.charAt(i);  
         if(c!='\n'){  
           end++;  
         }  
       }  
       oTextRange.moveStart('character', start);  
       oTextRange.moveEnd('character', -end);  
       //oTextRange.collapse(true);  
       oTextRange.select();  
       oTextarea.focus();  
     }else{  
       oTextarea.select();  
       oTextarea.selectionStart=start;  
       oTextarea.selectionEnd=end;  
     }  
   }  
 </script>  
 <body>  
   <table border="1" cellspacing="0" cellpadding="0">  
     <tr>  
       <td>start: <input type="text" id="start" size="3" value="0"/></td>  
       <td>end:   <input type="text" id="end"   size="3" value="0"/></td>  
     </tr>  
     <tr>  
     <td colspan="2">  
       <textarea id="textarea"  
         onKeydown="posCursor()"  
         onKeyup="posCursor()"  
         onmousedown="posCursor()"  
         onmouseup="posCursor()"  
         onfocus="posCursor()"  
         rows="14"  
         cols="50">虞美人  
春花秋月何时了,往事知多少。  
小楼昨夜又东风,故国不堪回首月明中!  
雕l栏玉砌应犹在,只是朱颜改。  
问君能有几多愁?恰似一江春水向东流。</textarea>  
       </td>  
     </tr>  
     <tr>  
       <td></td>  
       <td><input type="button" onClick="moveCursor()" value="设置光标位置"/></td>  
     </tr>  
   </table>  
 </body>  
</html>

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 js ,控制光标位置 如何取得text输入框中当前光标的坐标 数据库开发都需要哪些软件? 做数据库开发这一行工作应该要掌握哪些知识与技能? 数据库的开发过程中主要有哪三种数据模型 数据库开发工具有哪些 谢谢了 数据库的开发工具有哪些? 数据库开发 浠的拼音 数据库开发和建立是一个意思吗 数据库的开发流程是什么? 数据库开发的主要工作包括哪些呢? 数据开发是什么? 数据开发是做什么东西的? 数据库开发是什么 数据库开发是做什么东西的? 关于象牙的知识 陕西汉中凉皮的来源那个最好 象牙是什么做的 办理电信的卡需要带身份证嘛? javascript怎么设置Input内的光标位置? JS怎样实现用按钮控制textarea文本框的光标按行移动 如何利用JS代码选取textarea中的指定行 JavaScript如何获取光标所在的文本框的name? javascript中怎么设置文本框获得焦点 jspinput文本框调整位置 javascript光标range对象问题 javascript高手请帮忙,一个光标位置问题 如何在TextArea里实现换行 javaScript怎么判断光标在哪个文本框上,不使用鼠标,用tab键切换的 sai 移动画布的快捷键 js中&lt;input&#47;&gt;如何获得焦点? javascript如何获取文本控件中选中的文字? js如何选中input内的文本 C# 在textbox里获取 光标 所在的列呢! JS的focus()获得文本框焦点后,光标位置如何跳到文本末尾? 求js高手解决:在文本框内的光标处 用js插入文本 javascript input text 焦点问题 求好听带符号的QQ繁体字名字 急需好听炫酷的QQ名字繁体字带符号的!!!