2

单击按钮时,我试图在文本输入中获取用户选择的文本。这就是我正在尝试的:

<head>
    <script type="text/javascript">
        function GetSelectedText () {
            if (window.getSelection) {  // all browsers, except IE before version 9
                var range = window.getSelection ();                                        
                alert (range.toString ());
            } 
            else {
                if (document.selection.createRange) { // Internet Explorer
document.getElementById("foo").focus();
                    var range = document.selection.createRange();
                    alert (range.text);
                }
            }
        }
    </script>
</head>
<body>
    <button onclick="GetSelectedText ()">Get the selected text!</button>
    <input type = 'text' id = 'foo' />12345
</body>

它在所有浏览器中都按预期工作,除了IE9. 在IE9中,如果您从12345块中选择一些文本并按下按钮,则所选文本会被警告。但是,如果您在文本输入中键入内容,选择其中一些内容,然后单击按钮,则会生成空白警报。

谁能告诉我如何让它工作IE9?还有什么方法可以让选择开始的光标位置也开始(类似于Mozilla的selectionStart)?我正在寻找 Javascript 解决方案,没有Rangy或其他相关的 jQuery 库..

4

3 回答 3

2

文本输入和文本区域具有单独的选择 API,即输入本身selectionStartselectionEnd属性。这些在 IE <= 8 中不受支持,但您已经有了替代方案。

GetSelectedText()是适用于所有主要浏览器的函数的实现:

演示:http: //jsfiddle.net/UK8gA/

代码:

function GetSelectedText() {
    var selectedText = "";
    var input = document.getElementById("foo");
    var sel, val = input.value;
    input.focus();
    if (typeof input.selectionStart == "number") {
        selectedText = val.slice(input.selectionStart, input.selectionEnd);
    } else if ( (sel = document.selection) && sel.createRange) { // IE
        var range = document.selection.createRange();
        selectedText = range.text;
    }
    alert(selectedText);
}
于 2013-02-25T22:54:19.403 回答
0

你可以看看 jQuery Caret 插件:jCaret

// Get start pos in intput box with id="box1"
$("#box1").caret().start

// Get end pos
$("#box1").caret().end

// Get selected text
$("#box1").caret().text
于 2013-02-25T20:10:02.870 回答
0

除了 "document.getElementById("foo").focus();" 行之外,一切看起来都不错 似乎没有必要,这可能是浏览器无法检测到突出显示的文本的原因。尝试删除它,看看你会得到什么。

于 2013-02-25T20:18:39.247 回答