我无法解释下面代码的行为。这是我的整个脚本
<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)相同的文字?
我正在使用谷歌浏览器进行测试
答案 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;
}
我记得在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()
否则您将无法访问数据