javascript - 文本输入选择在 IE9 中不起作用

标签 javascript internet-explorer-9 selection

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

<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 block 中选择一些文本并按下按钮,则所选文本会收到警报。但是,如果您在文本输入中键入内容,选择其中一些内容,然后单击按钮,则会生成空白警报。

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

最佳答案

文本输入和文本区域具有单独的选择 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);
}

关于javascript - 文本输入选择在 IE9 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15075481/

相关文章:

javascript - 使用 moment.js 或其他 javascript 库生成 WCF JSON 格式的日期

javascript - 一次选择一个单选按钮

javascript - 使用 ws.onmessage = myFunc; 设置时如何删除 native websocket 处理程序或者 ws.onopen = function(){}?

internet-explorer - Css 在 IE9 预览中旋转

javascript - IE9 javascript 排序顺序...为什么?

python - 如何使用 xsel 获取选定的文本 - Python

arrays - R:根据选择器减少数组

javascript - moment.unix() 没有给出正确的时间戳值

javascript - 如何使用 JavaScript 清除 Mobile Safari 中的文本选择?

javascript - Internet Explorer 怪异 - function item() { [native code] } - 它有什么作用?