在文本框光标位置插入内容在实际的项目应用中经常用到,比如在文本框插入表情,首先要获取光标在文本框中的位置,当然这个有浏览器兼容性问题。
IE下可以通过document.selection.createRange();获取光标位置,代码也很简单:
1 |
if (document.selection) { |
2 |
pos = document.selection.createRange(); |
Firefox浏览器则稍微负责一点,需要首先获取光标位置,然后对value进行字符串截取处理。
1 |
if (obj.selectionStart || obj.selectionStart == '0' ) { |
2 |
var startPos = obj.selectionStart; |
3 |
var endPos = obj.selectionEnd; |
4 |
obj.value = obj.value.substring(0, startPos) + "要插入的字符串" + obj.value.substring(endPos, obj.value.length); |
5 |
obj.selectionStart = startPos + myValue.length; |
6 |
obj.selectionEnd = startPos + myValue.length; |
8 |
obj.value += "要插入的字符串" ; |
这些可以查看Javascript在光标位置插入内容;
现在微博很火,我们可以尝试一下插入话题,你点击话题,在光标位置就会插入:#请在这里输入自定义话题#,注意,“请在这里输入自定义话题”这几文字是被选中,你可以直接敲打键盘编辑文本。
在火狐下先对比较简单,我们只要在上面的代码中插入一句就可以了:
obj.setSelectionRange(startPos-t,obj.selectionEnd+t);
t是根据数值选中插入文本内容两边的边界数值,如:0是表示插入文字全部选择,-1表示插入文字两边各少选中一个字符。
但是在ie下比较麻烦,要设置光标的位置,然后选中文字。
完整代码如下:
11 |
insertContent: function (myValue, t) { |
13 |
if (document.selection) { |
15 |
var sel = document.selection.createRange(); |
18 |
sel.moveStart( 'character' , -l); |
19 |
var wee = sel.text.length; |
20 |
if (arguments.length == 2) { |
21 |
var l = $t.value.length; |
22 |
sel.moveEnd( "character" , wee + t); |
23 |
t < = 0 ? sel.moveStart( "character" , wee - 2 * t - myValue.length) : sel.moveStart( "character" , wee - t - myValue.length); |
27 |
} else if ($t.selectionStart || $t.selectionStart == '0' ) { |
28 |
var startPos = $t.selectionStart; |
29 |
var endPos = $t.selectionEnd; |
30 |
var scrollTop = $t.scrollTop; |
31 |
$t.value = $t.value.substring(0, startPos) + myValue + $t.value.substring(endPos, $t.value.length); |
33 |
$t.selectionStart = startPos + myValue.length; |
34 |
$t.selectionEnd = startPos + myValue.length; |
35 |
$t.scrollTop = scrollTop; |
36 |
if (arguments.length == 2) { |
37 |
$t.setSelectionRange(startPos - t, $t.selectionEnd + t); |
42 |
this .value += myValue; |
调用方式:
1 |
$(文本域选择器).insertContent( "插入的内容" ); |
2 |
$(文本域选择器).insertContent( "插入的内容" ,数值); |
演示地址:http://www.css88.com/demo/insertContent/
声明: 本文采用 BY-NC-SA 协议进行授权 | WEB前端开发
转载请注明转自《【jQuery插件】insertContent-在文本框光标位置插入内容并选中》