Javascript:从IE8中的Textarea获取所选文本

时间:2010-08-24 16:58:16

标签: javascript

我正在尝试读取文本区域中所选文本的值。这是我的代码:

function readSelected(id)
{ 
    textarea = document.getElementById(id);
    if (document.selection)
    { //Code for IE
        textarea.focus();
        sel = document.selection.createRange();
        alert(sel.text);
    }
    else 
    {  // Code for Mozilla Firefox
        var len = textarea.value.length;
        var start = textarea.selectionStart;
        var end = textarea.selectionEnd;

        var scrollTop = textarea.scrollTop;
        var scrollLeft = textarea.scrollLeft;

        sel = textarea.value.substring(start, end);

        alert(sel);
    }
}

HTML:

<textarea id="txt1" rows="10"></textarea> 
<a onclick="readSelected('txt1');">Get Selected</a>

单击该按钮时,会出现一个弹出窗口,告诉您所选文本是什么。

该代码适用于Firefox,但我无法在IE8中使用它。

2 个答案:

答案 0 :(得分:3)

问题是单击<a>元素会破坏选择。您可以使用不可选择的按钮:

<input type="button" value="get" onclick="readSelected('txt1');" unselectable="on">

您的代码存在其他小问题

  1. 您应该声明所有变量,否则它们最终会泄漏到全局范围内。 seltextarea是违规者。
  2. scrollTopscrollLeft是多余的。
  3. 您应首先测试selectionStartselectionEnd属性,因为它们是标准(HTML 5指定它们,IE 9将支持它们)。
  4. 这是我的重写版本:

    function readSelected(id) {
        var sel = "", el = document.getElementById(id);
        if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") {
            sel = el.value.slice(el.selectionStart, el.selectionEnd);
        } else if (document.selection && document.selection.createRange) {
            el.focus();
            sel = document.selection.createRange().text;
        }
        alert(sel);
    }
    

答案 1 :(得分:2)

您是否尝试使用onmousedown代替onclick