Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 文本输入选择在IE9中不起作用_Javascript_Internet Explorer 9_Selection - Fatal编程技术网

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

Javascript 文本输入选择在IE9中不起作用,javascript,internet-explorer-9,selection,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.ge

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

<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>

函数GetSelectedText(){
if(window.getSelection){//所有浏览器,版本9之前的IE除外
var range=window.getSelection();
警报(range.toString());
} 
否则{
if(document.selection.createRange){//Internet Explorer
document.getElementById(“foo”).focus();
var range=document.selection.createRange();
警报(range.text);
}
}
}
获取所选文本!
12345
除了
IE9
,它在所有浏览器中都能正常工作。在
IE9
中,如果您从
12345
区块中选择一些文本并按下按钮,则所选文本会立即发出警报。但是,如果在文本输入中键入某些内容,选择其中一些内容,然后单击按钮,将生成一个空白警报


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

您可以查看jQuery插入符号插件:


除了“document.getElementById(“foo”).focus();”这一行似乎不是必需的,这可能是浏览器无法检测高亮显示文本的原因。尝试删除它并查看您得到了什么。

文本输入和文本区域有一个单独的选择API,即
selectionStart
selectionEnd
输入本身的属性。IE不支持这些,是的,我知道有jQuery解决方案,比如
Rangy
或者这个。我正在寻找一个严格的Javascript实现…对不起,我当时帮不了你。我后来添加了它,看看它是否有效。如果没有这些,它也无法工作:)实际上,你的代码在Firefox中也无法工作。那么,你有什么不同的做法吗?您还可以使用
document.selection.createRange()
然后使用
range.text
来获取文本。没关系,获取了。你能告诉我是否有任何方法也能得到起始光标的位置吗?(我认为有,
Rangy
毕竟做到了!)@Cupidvogel:
selectionStart
就是你需要的。旧IE的解决方法是有点棘手的换行。举个例子。嗨,蒂姆,你有没有注意到一件事,如果你用a
p
替换按钮,并将clickhandler连接到按钮上,IE9中只会出现一个空白的弹出窗口?@Cupidvogel:是的。这在IE的所有版本中都会发生,因为当
单击事件触发时,选择被销毁。您可以通过使被单击的元素不可选择(在IE中使用
unselectable=“on”
)或处理
mousedown
事件来解决此问题。
// Get start pos in intput box with id="box1"
$("#box1").caret().start

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

// Get selected text
$("#box1").caret().text
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);
}