鸟食轩

 Microsoft .NET[C#] MVP 2003
随笔 - 429, 文章 - 235, 评论 - 5529, 引用 - 356
数据加载中……

使用TextRange获取输入框中光标的位置

    TextRange是用来表现HTML元素中文字的对象,虽然我们平时不太常用这个对象,可是它却在IE4.0中就已提供了。不过TextRange提供的调用方法却都比较晦涩,那么我们能拿它做些什么呢?

    TextRange的传统用途是对用户在Web页上用鼠标圈选的文字内容的操作,比如变化、删除、新增等。但其经典的用途却是,在Web页面中查找文字(这个比较简单)和获取输入框光标的位置。其中后者又有可以衍生出很多更有用的用途,比如:限制输入的MaskTextBox,其核心技术点就是获取输入框的光标位置,然后使用正则表达式判断输入内容。还有我后面会介绍的"使用方向键在输入框矩阵中自然的导航",核心技术点也是获取输入框中的光标位置。

    获取输入框中的光标位置的整个代码其实很短,只是这些对象和方法不太常用而已。
<script language="javascript">
function GetCursorPsn(txb)
{
    
var slct = document.selection;
    
var rng = slct.createRange();
    txb.select();
    rng.setEndPoint(
"StartToStart", slct.createRange());
    
var psn = rng.text.length;
    rng.collapse(
false);
    rng.select();
    
return psn;
}

</script>


    要彻底的弄清楚TextRange的具体用法,需要了解与其相关的一些内容,请参考MSDN

    这里说一下使用这个GetCursorPsn()方法后,会给输入框操作带来的副作用。对于输入框<input type="text" onkeydown="GetCursorPsn(this)">,它将不能再使用Shift+左右这两个方向键来选择文本;对于<textarea onkeydown="GetCursorPsn(this)"></textarea>,将不能再使用Shift+上下左右四个方向键来选择文本。因为代码在获取了当前光标到文本的startPoint后,调用rng.collapse(false);会改变文本筐内文本的EditPoint。不过这个副作用基本不会给我们使用文本框带来什么大的问题,所以基本不用太在意。 

posted on 2005-01-13 01:03 birdshome 阅读(4005) 评论(5)  编辑 收藏 网摘 所属分类: Jscript&Dhtml开发

评论

#1楼   回复  引用  查看    

以后js的帖子我都顶!
2005-01-13 11:41 | 宝玉      

#2楼   回复  引用    

这个问题困扰了我好几天,终于找到你了,爱死你了!
2005-05-26 09:21 | Eric

#3楼   回复  引用    

谢谢!
2006-08-07 15:49 | 进[未注册用户]

#4楼   回复  引用    

爱死你还不至于
不过 还不错啊
2008-04-04 19:52 | 未知[未注册用户]

#5楼   回复  引用  查看    

另一种类似的方法:
http://www.cnblogs.com/blodfox777/archive/2008/08/27/1278001.html" target="_new">http://www.cnblogs.com/blodfox777/archive/2008/08/27/1278001.html
2008-08-28 16:18 | LanceZhang      



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 87432




相关文章:

相关链接: