textarea定位光标

<html>
<head>
<title>TEST</title>
<style>
body,td{
    font-family: verdana, arial, helvetica, sans-serif;
    font-size: 12px;
}
</style>
<script type="text/javascript">
    var start=0;
    var end=0;
	function MoveCursortoPos(id,pos){//定位光标到某个位置
		var obj = document.getElementById(id);
		pos = pos ?pos :obj.value.length;
		if (obj.createTextRange) {//IE浏览器
		   var range = obj.createTextRange();
		   range.moveStart("character", pos);
		   range.collapse(true);
		   range.select();
		} else {//非IE浏览器
		   obj.setSelectionRange(obj.value.length, pos);
		}   
		obj.focus();     
	}

    function add(){        
        var textBox = document.getElementById("ta");
        var pre = textBox.value.substr(0, start);
        var post = textBox.value.substr(end);
        textBox.value = pre + document.getElementById("inputtext").value + post;
		MoveCursortoPos("ta",start+document.getElementById("inputtext").value.length);
    }
    function savePos(textBox){
        //如果是Firefox(1.5)的话,方法很简单
        if(typeof(textBox.selectionStart) == "number"){
            start = textBox.selectionStart;
            end = textBox.selectionEnd;
        }
        //下面是IE(6.0)的方法,麻烦得很,还要计算上‘\n‘
        else if(document.selection){
            var range = document.selection.createRange();
            if(range.parentElement().id == textBox.id){
                // create a selection of the whole textarea
                var range_all = document.body.createTextRange();
                range_all.moveToElementText(textBox);
                //两个range,一个是已经选择的text(range),一个是整个textarea(range_all)
                //range_all.compareEndPoints()比较两个端点,如果range_all比range更往左(further to the left),则                //返回小于0的值,则range_all往右移一点,直到两个range的start相同。
                // calculate selection start point by moving beginning of range_all to beginning of range
                for (start=0; range_all.compareEndPoints("StartToStart", range) < 0; start++)
                    range_all.moveStart(‘character‘, 1);
                // get number of line breaks from textarea start to selection start and add them to start
                // 计算一下\n
                for (var i = 0; i <= start; i ++){
                    if (textBox.value.charAt(i) == ‘\n‘)
                        start++;
                }
                // create a selection of the whole textarea
                 var range_all = document.body.createTextRange();
                 range_all.moveToElementText(textBox);
                 // calculate selection end point by moving beginning of range_all to end of range
                 for (end = 0; range_all.compareEndPoints(‘StartToEnd‘, range) < 0; end ++)
                     range_all.moveStart(‘character‘, 1);
                     // get number of line breaks from textarea start to selection end and add them to end
                     for (var i = 0; i <= end; i ++){
                         if (textBox.value.charAt(i) == ‘\n‘)
                             end ++;
                     }
                }
            }
        document.getElementById("start").value = start;
        document.getElementById("end").value = end;
    }
</script>
</head>
<body>
<form action="a.cgi">
<table border="1" cellspacing="0" cellpadding="0">
    <tr>
        <td>start: <input type="text" id="start" size="3"/></td>
        <td>end: <input type="text" id="end" size="3"/></td>
    </tr>
    <tr>
        <td colspan="2">
            <textarea id="ta" onKeydown="savePos(this)" 
                              onKeyup="savePos(this)" 
                              onmousedown="savePos(this)" 
                              onmouseup="savePos(this)" 
                              onfocus="savePos(this)" 
                              rows="14" cols="50"></textarea>
        </td>
    </tr>
    <tr>
        <td><input type="text" id="inputtext" /></td>
        <td><input type="button" onClick="add()" value="Add Text"/></td>
    </tr>
</table>
</form>
</body>
</html>
时间: 2024-10-19 02:58:09

textarea定位光标的相关文章

TextArea中定位光标位置

原文:TextArea中定位光标位置 在项目中,遇到一个场景:希望能在TextArea中输入某条记录中的明细(明细较简单,没有附属信息,只用记录顺序和值即可,譬如用"+"号来作为明细分隔符:1+1.5+2+3.4),如下图所示: 为了让输入更直观,需要在输入过程中,实时地显示汇总数量和合计:如果用户希望编辑文本中间的某条明细,也可以通过鼠标点击.或者键盘上的上下左右键来定位某个明细,并在页面上提示光标的焦点位置. 最开始,通过windows.event.x.windows.event.

【Javascript】在文本框光标处插入文字并定位光标 (转)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

TextView和textField 定位光标问题

有时候需要定位光标位置,但是测试之后发现textField并没有响应方法能监听到光标位置的改变,但是textField可以定义光标位置的变化. 当 有textField需求要监听光标位置变化时,可以利用textView来代替 #import "ViewController.h" @interface ViewController () <UITextViewDelegate> @end @implementation ViewController - (void)viewD

textarea在光标位置插入文字

最近开发类似计算器界面,需要在textarea中编辑公式,涉及到 在光标位置插入 字符. 效果如下: + - * / 添加文字 html代码如下: <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>hover demo</title> </head> <body> <texta

html元素contenteditable属性如何定位光标和设置光标

最近在山寨一款网页微信的产品,对于div用contenteditable属性做的编辑框有不少心得,希望可以帮到入坑的同学. 废话不多说了,我们先来理解一下HTML的光标对象是如何工作的,后面我会贴完整的DEMO代码,不用急,先去理解,才能做出更加好的输入体验. 在HTML里面,光标是一个对象,光标对象是只有当你选中某个元素的时候才会出现的. 当我们去点击一个输入框的时候,实际上它会产生一个选中对象-selection(就是我们可以看到的文字变成蓝色的那个区域),selection在火狐浏览器可以

textarea的光标自动居左的问题

<script>function s(e,a){if ( e && e.preventDefault )e.preventDefault();else window.event.returnValue=false;a.focus(); }</script><textarea id="anan" onmousedown="s(event,this)"></textarea></body>

使用JS在textarea在光标处插入内容

// 在光标处插入字符串 // myField 文本框对象 // myValue 要插入的值 function insertAtCursor(myField, myValue) { //IE support if (document.selection) { myField.focus(); sel = document.selection.createRange(); sel.text = myValue; sel.select(); } //MOZILLA/NETSCAPE support

在新的一行定位光标

<p><br/></p> range.selectNodeContents(p).collapse(true);将光标放在br之前,会插入&#8203, <p> &#8203| <br/> </p> 在红色位置输入 ,保存之后&#8203 与br都会被去掉 &#8203与br共存的情况时,如果光标是在&#8203上面,则输入文本就会变成 &#8203*****,这个时候br不会自动消失,

JQuery扩展:TextArea在光标处插入文本

$.fn.extend({     insertAtCursor : function(myValue) {         var $t = $(this)[0];         if (document.selection) {             this.focus();             sel = document.selection.createRange();             sel.text = myValue;             this.focus