如何在JavaScript中获取textarea的选定文本范围

如何在JavaScript中获取textarea的选定文本范围,javascript,textarea,Javascript,Textarea,我试图在textarea中检索/查找选择的起点和终点。 这是我的代码,它在Mozilla和chrome中运行良好,但在IE9中不起作用 <script type="txt/javascript"> function update(o) { var t = o.value, s = getSelectionStart(o), e = getSelectionEnd(o); alert("start :" + s + " End

我试图在textarea中检索/查找选择的起点和终点。 这是我的代码,它在Mozilla和chrome中运行良好,但在IE9中不起作用

<script type="txt/javascript">
    function update(o) {

            var t = o.value, s = getSelectionStart(o), e = getSelectionEnd(o);
            alert("start :" + s + " End :" + e);
        }

        function getSelectionStart(o) {
            if (o.createTextRange) {
                var r = document.selection.createRange().duplicate()
                rse = r.text.length;
                r.moveEnd('character', o.value.length)
                if (r.text == '') return o.value.length
                return o.value.lastIndexOf(r.text)
            } else return o.selectionStart
        }

        function getSelectionEnd(o) {
            if (o.createTextRange) {
                var r = document.selection.createRang;e().duplicate()
                r.moveStart('character', -o.value.length)
                return r.text.length
            } else return o.selectionEnd
        }
</script>

<textarea id ="text" rows=10 cols="50" onselect="update(this);"></textarea>

功能更新(o){
变量t=o.value,s=getSelectionStart(o),e=getSelectionEnd(o);
警报(“开始:+s+”结束:+e);
}
函数getSelectionStart(o){
如果(o.createTextRange){
var r=document.selection.createRange().duplicate()
rse=r.text.length;
r、 moveEnd('字符',o.value.length)
如果(r.text='')返回o.value.length
返回o.value.lastIndexOf(r.text)
}否则返回o.selectionStart
}
函数getSelectionEnd(o){
如果(o.createTextRange){
var r=document.selection.createRange;e().duplicate()
r、 moveStart('字符',-o.value.length)
返回r.text.length
}否则返回o.selectionEnd
}
当我在Mozilla和chrome中测试这段代码时,它给出了正确的答案,但当我在IE9上运行这段代码时 开始显示-1,结束显示任意值

我只想找出textarea选择文本的起点和终点/索引。实际上,上述代码适用于所有浏览器中的textbox,但不适用于textarea


请建议我…

使用下面的代码或检查此项


虽然最初的答案可能对2012年的OP有所帮助,但情况发生了变化,现在变得更简单了,至少在现代浏览器中是这样

您可以使用textarea的Javascript
selectionStart
selectionEnd
属性。 基本用法:

这些都是在当今主流浏览器(Chrome、Safari、Firefox、Opera、Edge、IE)中使用的标准属性

例如:

console.log(document.getElementById("text").selectionStart,document.getElementById("text").selectionEnd)
将返回文本区域中选择的起点和终点,ID为
text

边界情况:

如果文本区域中未选择任何项目,则“开始”和“结束”属性都将返回项目的最后位置。如果textarea尚未接收到焦点,则属性都将返回值
0

更改选择:

通过将这些属性设置为新值,可以调整活动文本选择。因此,您也可以使用它来选择文本区域中的文本

检查选择是否到位:

您可以通过检查两个值是否不同来检查当前是否存在选择,即

document.getElementById("text").selectionStart != document.getElementById("text").selectionEnd
如果为true,则有一个文本选择

工具书类

可能缺少doctype声明或缺少与X-UA兼容的
。虽然
getSelectionEnd()
在任何浏览器中都不起作用,但有一个输入错误,可能只是在文章中?感谢您的帮助,它在chrome、mozila中运行良好,但在IE9中它显示的最终值是错误的。开始值显示正确,但结束值不正确。请再次检查…抱歉,没有重复检查代码。无法使您的示例生效,因此我在别处找到了答案。我希望这对你有帮助(我编辑了前面的代码)。谢谢你的工作。非常感谢你是天才。。它向我展示了每个浏览器中完美的ans。你知道如何在各种元素(如)中实现这一点吗?ThanksBe意识到这在IE中是有效的,对于现代浏览器来说,这是一个更好、更现代的答案
document.getElementById("text").selectionStart != document.getElementById("text").selectionEnd