为什么这个简单的javascript / jquery代码不能提示所选文本?

时间:2011-05-29 21:38:49

标签: javascript jquery

我无法解释下面代码的行为。这是我的整个脚本

<html>
<head>
<script type="text/javascript" language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script> 
<script type="text/javascript" language="javascript">
var tmpText = '';
$(document).ready(function(){
        tmpText = '';
        $('#btn_bold').click(function(){alert(tmpText);});
        $('textarea').bind('mouseup', function(){
                  tmpText = '';
                  if(window.getSelection){
                    tmpText = window.getSelection();
                  }else if(document.getSelection){
                    tmpText = document.getSelection();
                  }else if(document.selection){
                    tmpText = document.selection.createRange().text;
                  }
                //tmpText = 'hello world';
                alert(tmpText);
        });
});

</script>
</head>
<body>
<button type="button" id="btn_bold">click</button>
<textarea>This is some text</textarea>
</body>
</html>

尝试以下操作:

1)使用鼠标在文本区域中显示高亮文本。您会注意到javascript会提醒您所选的文本。

2)按下单击按钮。您会注意到javascript会提醒您一个空字符串。

不取消注释tmpText = 'hello world';并重复上述步骤。这一次,你会发现步骤1)和2)都提醒你“你好世界”。

为什么第一个实验中的第2个步骤没有提醒您与步骤1)相同的文字?

我正在使用谷歌浏览器进行测试

3 个答案:

答案 0 :(得分:4)

因为它没有自动转换为字符串。当你使用alert()直接调用它时,它会在其上运行toString,但是当你分配给稍后使用的变量时,它会将它保留为选择对象,当你稍后尝试提醒时,你可能会赢得&#39 ; t使该选择再次激活(因为您只是单击了按钮)。

在每个选项的末尾添加toString(),它应该按预期工作。

if(window.getSelection){
                    tmpText = window.getSelection().toString();
                  }else if(document.getSelection){
                    tmpText = document.getSelection().toString();
                  }else if(document.selection){
                    tmpText = document.selection.createRange().text;
                  }

example on jsfiddle

我记得在getSelection位下的mozilla开发者页面中对此进行了很好的解释,如果你想更好地解释为什么会这样。

编辑:在mozilla上找到指向该页面的链接,具体检查他们在&#34; Notes&#34;。

下的内容。

答案 1 :(得分:0)

在大多数浏览器中,textarea(或文本输入)中的选择的处理方式与页面主体中的选择不同。要在textarea中获取所选文本,您可以使用以下内容,它适用于所有主流浏览器:

jsFiddle:http://jsfiddle.net/fxN7p/

代码:

function getTextareaSelectedText(textarea) {
    var text = "";
    if (typeof textarea.selectionStart == "number") {
        text = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);
    } else if (typeof document.selection != "none" && document.selection.type == "Text") {
        text = document.selection.createRange().text;
    }
    return text;
}

答案 2 :(得分:0)

Hii ......

你必须转换为字符串选择...示例

window.getSelection().toString()

否则您将无法访问数据