zoukankan      html  css  js  c++  java
  • 获取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>
    


     

  • 相关阅读:
    PHP保留小数的相关方法
    ASP.NET Core MVC 之过滤器(Filter)
    ASP.NET Core MVC 之控制器(Controller)
    ASP.NET Core MVC 之视图组件(View Component)
    ASP.NET Core MVC 之局部视图(Partial Views)
    标签助手(TagHelper)
    ASP.NET Core MVC 之布局(Layout)
    ASP.NET Core MVC 之视图(Views)
    ASP.NET Core MVC 之模型(Model)
    九卷读书:淘宝从小到大的发展 -重读《淘宝技术这十年》
  • 原文地址:https://www.cnblogs.com/smartsmile/p/6234435.html
Copyright © 2011-2022 走看看