﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Kimi's NutShell-随笔分类-JS精彩片段</title><link>http://www.blogjava.net/kemi/category/22256.html</link><description>珍藏美好</description><language>zh-cn</language><lastBuildDate>Tue, 08 May 2007 16:33:26 GMT</lastBuildDate><pubDate>Tue, 08 May 2007 16:33:26 GMT</pubDate><ttl>60</ttl><item><title>从某牛人处盗来的关于处理 TextArea的焦点问题 （转）</title><link>http://www.blogjava.net/kemi/archive/2007/05/08/115992.html</link><dc:creator>Kimi</dc:creator><author>Kimi</author><pubDate>Tue, 08 May 2007 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/kemi/archive/2007/05/08/115992.html</guid><wfw:comment>http://www.blogjava.net/kemi/comments/115992.html</wfw:comment><comments>http://www.blogjava.net/kemi/archive/2007/05/08/115992.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kemi/comments/commentRss/115992.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kemi/services/trackbacks/115992.html</trackback:ping><description><![CDATA[小弟最近在写一个在线编辑器，UBB版的，由于没有使用弹出窗口，所以，在添加代码的时候，只能添在TextArea的最后面，无法在光标之前插入，于是在网上疯狂的找资料，工夫不负有心人，终于被我找到了如何获得TextArea中的位置，但是如果TextArea中有很多内容的时候，会显得很闪烁。其代码如下。 
<p><font style="BACKGROUND-COLOR: #ffffff">　　function getPos(obj)<br />　　{<br />　　obj.focus();<br />　　var workRange=document.selection.createRange();<br />　　obj.select();<br />　　var allRange=document.selection.createRange();<br />　　workRange.setEndPoint("StartToStart",allRange);<br />　　var len=workRange.text.length;<br />　　workRange.collapse(false);<br />　　workRange.select(); </font></p><p><font style="BACKGROUND-COLOR: #ffffff">　　return len;<br />　　}</font></p><p>　　这时候问题出来了，在obj.select()的时候，会造成闪烁，并且滚动条也无法归位。于是小弟根据自己的需要，将其改写如下：</p><p>function getCaret(ZysrID) <br />{<br /> var txb = document.getElementById(ZysrID);//根据ID获得对象<br /> var pos = 0;//设置初始位置<br /> txb.focus();//输入框获得焦点,这句也不能少,不然后面会出错,血的教训啦.<br /> var s = txb.scrollTop;//获得滚动条的位置<br /> var r = document.selection.createRange();//创建文档选择对象<br /> var t = txb.createTextRange();//创建输入框文本对象<br /> t.collapse(true);//将光标移到头<br /> t.select();//显示光标,这个不能少,不然的话,光标没有移到头.当时我不知道,搞了十几分钟<br /> var j = document.selection.createRange();//为新的光标位置创建文档选择对象<br /> r.setEndPoint("StartToStart",j);//在以前的文档选择对象和新的对象之间创建对象,妈的,不好解释,我表达能力不算太好.有兴趣自己去看msdn的资料<br /> var str = r.text;//获得对象的文本<br /> var re = new RegExp("[\\n]","g");//过滤掉换行符,不然你的文字会有问题,会比你的文字实际长度要长一些.搞死我了.我说我得到的数字怎么总比我的实际长度要长.<br /> str = str.replace(re,"");//过滤<br /> pos = str.length;//获得长度.也就是光标的位置<br /> r.collapse(false);<br /> r.select();//把光标恢复到以前的位置<br /> txb.scrollTop = s;//把滚动条恢复到以前的位置<br />}</p><p>//设置光标函数</p><p>function setCaret(id,pos)<br />{<br />　　var textbox = document.all(id);<br />　　var r = textbox.createTextRange(); <br />　　r.collapse(true); <br />　　r.moveStart(@#character@#,pos); <br />　　r.select();<br />}</p><img src ="http://www.blogjava.net/kemi/aggbug/115992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kemi/" target="_blank">Kimi</a> 2007-05-08 17:04 <a href="http://www.blogjava.net/kemi/archive/2007/05/08/115992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>