$("body").on('click', 'button', function(e) {
var selection = window.getSelection().toString();
alert(selection);
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="txtarea">this is a test</textarea>
<button>click</button>
&#13;
在上面的小提琴中,我希望当我点击该按钮时它返回选定文本(在textarea中),但它总是不返回任何内容。我该如何解决?
注意:这不起作用:
var selection = window.getElementById("txtarea").getSelection().toString()
;
答案 0 :(得分:6)
当按下鼠标按钮然后释放时发生click
事件,此时选择将丢失。
您必须使用mousedown
事件,这在选择丢失之前按下鼠标按钮时会发生
function getSelection(elem) {
var selectedText;
if (document.selection != undefined) { // IE
elem.focus();
var sel = document.selection.createRange();
selectedText = sel.text;
} else if (elem.selectionStart != undefined) { // Firefox
var startPos = elem.selectionStart;
var endPos = elem.selectionEnd;
selectedText = elem.value.substring(startPos, endPos)
}
return selectedText;
}
$(document).on('mousedown', 'button', function(e) {
var selection = getSelection( $('#txtarea').get(0) );
alert(selection);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="txtarea">this is a test</textarea>
<button>click</button>
答案 1 :(得分:0)
无法解决问题,AFAIK - 点击任意位置即可删除选择内容。尝试不使用JavaScript:只要单击按钮,或者确实在任何地方,选择就会消失。您的代码会在发生这种情况后向您显示准确的状态。