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

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

    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); }); });        

请尝试以下操作:

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

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

没有取消注释tmpText = 'hello world'; 并重复上述步骤。 这一次,您会注意到步骤1)和2)提醒您“hello world”。

如何在第一个实验中,步骤2)不会提醒您与步骤1)相同的文本?

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

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

在每个选择的末尾添加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; } 

关于jsfiddle的例子

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

编辑:找到mozilla页面的链接,具体检查他们在“注释”下的内容。

在大多数浏览器中,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; } 

HII …

你必须转换为字符串选择…例子

 window.getSelection().toString() 

否则你将无法访问数据