单击按钮时,我试图在文本输入中获取用户选定的文本。这就是我想要的:
<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库..
答案 0 :(得分:2)
文本输入和textareas有一个单独的选择API,即输入本身的selectionStart
和selectionEnd
属性。 IE&lt; = 8不支持这些,但您已经有了替代方案。
以下是适用于所有主流浏览器的GetSelectedText()
函数的实现:
代码:
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);
}
答案 1 :(得分: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
答案 2 :(得分:0)
除了行“document.getElementById(”foo“)。focus();”之外,一切看起来都不错似乎没有必要,可能是浏览器无法检测突出显示的文本的原因。尝试删除它,看看你得到了什么。