javascript获取textarea光标位置,内容方法(IE, Firefox)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="jsCursorDemo._Default" %>
<!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 runat="server">
    <title></title>
    <script type="text/javascript">
        var start = 0;
        var end = 0;
        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;
        }
        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 id="form1" runat="server">
    <div>
        <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" οnkeydοwn="savePos(this);" οnkeyup="savePos(this);" οnmοusedοwn="savePos(this);"
                        οnmοuseup="savePos(this);" οnfοcus="savePos(this);" οnmοusemοve="savePos(this);" rows="14" cols="50"></textarea>
                </td>
            </tr>
            <tr>
                <td>
                    <input type="text" id="inputtext" />
                </td>
                <td>
                    <input type="button" οnclick="add()" value="Add Text" />
                </td>
            </tr>
        </table>
    
    </div>
    </form>
</body>
</html>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值