注: Firefox で文字列を追加すると、scrollTop が 0 に等しくなるというバグがあります。もちろん、これは解決されていますが、完全ではありません。研究された専門家がいらっしゃいましたら、アドバイスをお願いいたします。 完全なテスト コード: コードをコピー コードは次のとおりです: abcdefghijklmnopqrstuvwxyz// <![CDATA[<br>var test = document.getElementById('testlujun');<br>var TT = {<br><br> /*<br> * 获取光标位置<br> * @Method getCursorPosition<br> * @param t element<br> * @return number<br> */<br> getCursorPosition: function(t){<br> if (document.selection) {<br> t.focus();<br> var ds = document.selection;<br> var range = ds.createRange();<br> var stored_range = range.duplicate();<br> stored_range.moveToElementText(t);<br> stored_range.setEndPoint("EndToEnd", range);<br> t.selectionStart = stored_range.text.length - range.text.length;<br> t.selectionEnd = t.selectionStart + range.text.length;<br> return t.selectionStart;<br> } else return t.selectionStart<br> },<br><br> <br> /*<br> * 设置光标位置<br> * @Method setCursorPosition<br> * @param t element<br> * @param p number<br> * @return<br> */<br> setCursorPosition:function(t, p){<br> this.sel(t,p,p);<br> },<br><br> /*<br> * 插入到光标后面<br> * @Method add<br> * @param t element<br> * @param txt String<br> * @return<br> */<br> add:function (t, txt){<br> var val = t.value;<br> if(document.selection){<br> t.focus()<br> document.selection.createRange().text = txt; <br> } else {<br> var cp = t.selectionStart;<br> var ubbLength = t.value.length;<br> var s = t.scrollTop;<br> // document.getElementById('aaa').innerHTML += s + '<br />';<br> t.value = t.value.slice(0,t.selectionStart) + txt + t.value.slice(t.selectionStart, ubbLength);<br> this.setCursorPosition(t, cp + txt.length);<br> // document.getElementById('aaa').innerHTML += t.scrollTop + '<br />';<br> firefox=navigator.userAgent.toLowerCase().match(/firefox\/([\d\.]+)/) && setTimeout(function(){<br> if(t.scrollTop != s) t.scrollTop=s;<br> },0) <p> };<br> },<br><br> <br> /*<br> * 删除光标 前面或者后面的 n 个字符<br> * @Method del<br> * @param t element<br> * @param n number n>0 后面 n<0 前面<BR> * @return<BR> * 重新设置 value 的时候 scrollTop 的值会被清0<BR> */<BR> del:function(t, n){<BR> var p = this.getCursorPosition(t);<BR> var s = t.scrollTop;<BR> var val = t.value;<BR> t.value = n > 0 ? val.slice(0, p - n) + val.slice(p):<br> val.slice(0, p) + val.slice(p - n);<br> this.setCursorPosition(t ,p - (n < 0 ? 0 : n));<BR> firefox=navigator.userAgent.toLowerCase().match(/firefox\/([\d\.]+)/) && setTimeout(function(){<BR> if(t.scrollTop != s) t.scrollTop=s;<BR> },10)<BR> },<br><br> /*<BR> * 选中 s 到 z 位置的文字<BR> * @Method sel<BR> * @param t element<BR> * @param s number<BR> * @param z number<BR> * @return<BR> */<BR> sel:function(t, s, z){<BR> if(document.selection){<BR> var range = t.createTextRange();<BR> range.moveEnd('character', -t.value.length); <BR> range.moveEnd('character', z);<BR> range.moveStart('character', s);<BR> range.select();<BR> }else{<BR> t.setSelectionRange(s,z);<BR> t.focus();<BR> }</P><P> },<br><br> <BR> /*<BR> * Select a string <BR> * @Method sel<BR> * @param t element<BR> * @param s String<BR> * @return<BR> */<BR> selString:function(t, s){<BR> var index = t.value.indexOf(s);<BR> index != -1 ? this.sel(t, index, index s.length) : false;<BR> }</P> <P>}<BR>// ]]>