• 获取Textarea 元素当前的光标位置及document.selection.createRange()资料


    <!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>
        <title>Demo : Textarea 元素的光标位置</title>
        <style type="text/css">
            #result
            {
                font-size: 18px;
                line-height: 25px;
                padding-left: 20px;
            }
        </style>
    </head>
    <body>
        <div>
            <h1>
                Textarea 元素的光标位置</h1>
            <ul>
                <li>获取 Textarea 元素当前的光标位置</li>
                <li>设置回原先的 Textarea 元素的光标位置</li>
                <li>在 Textarea 元素的光标位置插入文本</li>
            </ul>
            <form action="#">
            <textarea id="test" rows="8" cols="50"></textarea>
            <p>
                <input type="button" id="get" value="Get Cursor Position" />
                <input type="button" id="set" value="Set Cursor Position" />
                <input type="button" id="add" value="Add Text After Cursor Position" />
            </p>
            </form>
            <h2>
                Textarea Range:</h2>
            <div id="result">
            </div>
            <script type="text/javascript">
    
                document.getElementById("get").onclick = function () {
                    //alert(tx.value.length);
                    var tx = document.getElementById("test");
                    var re = document.getElementById("result");
                    var pos = cursorPosition.get(tx);
                    re.innerHTML = ("<strong>Range :</strong> (" + pos.start + ", " + pos.end + ")<br /><strong>Text :</strong> " + (!pos.text ? '//--' : pos.text));
                }
    
                document.getElementById("set").onclick = function () {
                    var tx = document.getElementById("test");
                    var re = document.getElementById("result");
                    var pos = cursorPosition.get(tx);
                    cursorPosition.set(tx, pos);
                    re.innerHTML = "";
                }
    
                document.getElementById("add").onclick = function () {
                    var tx = document.getElementById("test");
                    pos = cursorPosition.get(tx);
                    cursorPosition.add(tx, pos, input = prompt("你想插入替换的文本:", ""));
                }
    
                /**
                * cursorPosition Object
                */
                var cursorPosition = {
                    get: function (textarea) {
                        var rangeData = { text: "", start: 0, end: 0 };
    
                        if (textarea.setSelectionRange) { // W3C	
                            textarea.focus();
                            rangeData.start = textarea.selectionStart;
                            rangeData.end = textarea.selectionEnd;
                            rangeData.text = (rangeData.start != rangeData.end) ? textarea.value.substring(rangeData.start, rangeData.end) : "";
                        } else if (document.selection) { // IE
                            textarea.focus();
                            var i,
    				oS = document.selection.createRange(),
                            // Don't: oR = textarea.createTextRange()
    				oR = document.body.createTextRange();
                            oR.moveToElementText(textarea);
    
                            rangeData.text = oS.text;
                            rangeData.bookmark = oS.getBookmark();
    
                            // object.moveStart(sUnit [, iCount]) 
                            // Return Value: Integer that returns the number of units moved.
                            for (i = 0; oR.compareEndPoints('StartToStart', oS) < 0 && oS.moveStart("character", -1) !== 0; i++) {
                                // Why? You can alert(textarea.value.length)
                                if (textarea.value.charAt(i) == '\r') {
                                    i++;
                                }
                            }
                            rangeData.start = i;
                            rangeData.end = rangeData.text.length + rangeData.start;
                        }
    
                        return rangeData;
                    },
    
                    set: function (textarea, rangeData) {
                        var oR, start, end;
                        if (!rangeData) {
                            alert("You must get cursor position first.")
                        }
                        textarea.focus();
                        if (textarea.setSelectionRange) { // W3C
                            textarea.setSelectionRange(rangeData.start, rangeData.end);
                        } else if (textarea.createTextRange) { // IE
                            oR = textarea.createTextRange();
    
                            // Fixbug : ues moveToBookmark()
                            // In IE, if cursor position at the end of textarea, the set function don't work
                            if (textarea.value.length === rangeData.start) {
                                //alert('hello')
                                oR.collapse(false);
                                oR.select();
                            } else {
                                oR.moveToBookmark(rangeData.bookmark);
                                oR.select();
                            }
                        }
                    },
    
                    add: function (textarea, rangeData, text) {
                        var oValue, nValue, oR, sR, nStart, nEnd, st;
                        this.set(textarea, rangeData);
    
                        if (textarea.setSelectionRange) { // W3C
                            oValue = textarea.value;
                            nValue = oValue.substring(0, rangeData.start) + text + oValue.substring(rangeData.end);
                            nStart = nEnd = rangeData.start + text.length;
                            st = textarea.scrollTop;
                            textarea.value = nValue;
                            // Fixbug:
                            // After textarea.values = nValue, scrollTop value to 0
                            if (textarea.scrollTop != st) {
                                textarea.scrollTop = st;
                            }
                            textarea.setSelectionRange(nStart, nEnd);
                        } else if (textarea.createTextRange) { // IE
                            sR = document.selection.createRange();
                            sR.text = text;
                            sR.setEndPoint('StartToEnd', sR);
                            sR.select();
                        }
                    }
                }
            </script>
        </div>
    </body>
    </html>
    


     

  • 相关阅读:
    2021年1月9日 Why retailers everywhere should look to China
    #微信小程序 #添加域名https://api.weixin.qq.com ,提示“为保障帐号安全不可使用此域名地址,请修改”
    用户画像分析与场景应用
    数据仓库组件:HBase集群环境搭建和应用案例
    标签管理体系之业务应用
    数据仓库组件:Hive环境搭建和基础用法
    数据应用场景之标签管理体系
    Solon rpc 之 SocketD 协议
    Solon rpc 之 SocketD 协议
    Solon rpc 之 SocketD 协议
  • 原文地址:https://www.cnblogs.com/smartsmile/p/6234435.html
Copyright © 2020-2023  润新知