我想在剪切之前触发一个事件,以便我可以获得正在剪切的文本,即已经选择的文本。我目前正在使用以下代码,似乎没有按预期工作。
$("#editor").bind({
cut:function(){
console.log('Cut Detected');
alert(editor.selection.getRange());
}
});
editor是“div”标签的id,可以编辑。 editor.selection.getRange()返回选择的开始和结束。 编辑我正在考虑使用内容可编辑的div,并希望在其上应用该功能。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Editor</title>
</head>
<body>
<div id='myTa' contenteditable>hello world where are you</div>
<script type='text/javascript' src='jquery-2.1.4.min.js'></script>
<script type='text/javascript'>
$("#myTa").on("cut", function(){
alert(this.selectionStart+ " to " + this.selectionEnd);
})
</script>
</body>
</html>
答案 0 :(得分:0)
我认为起初,clipboardEvent会有剪切文本,但似乎没有,所以我尝试找到输入的选择相关属性并找到它。
参考文献是HTMLInputElement。
此代码假定您的$("#editor")
是input
或textarea
。
$("#editor").bind({
cut:function(e){
console.log('Cut Detected');
var $this = $(this);
var selectStart = this.selectionStart;
var selectionEnd = this.selectionEnd;
var clippedValue = $this.val().slice(selectStart, selectionEnd);
// Now you have the clipped value, do whatever you want with the
// value.
alert(clippedValue);
}
});
对于有争议的作品,您可以执行此操作,我刚从Return HTML from a user-selected text和MDN
找到了相关信息
$("#myTa").on("cut", function(e){
// Seems diff bro
var selections = window.getSelection();
var currentSelection = selections.getRangeAt(0);
var start = currentSelection.startOffset;
var end = currentSelection.endOffset;
var selectedContents = currentSelection.toString();
// Do whatever you want.
console.log(start, end);
console.log(selectedContents);
alert(selectedContents);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id='myTa' contenteditable>ask;ndjkasn asdbasj aujs d sdib askjbnsaab asbh mjn a</div>
答案 1 :(得分:0)
您是正确的,您需要使用cut
事件。 ClipboardEvent API显然不稳定,但是,我认为它会将文本移动到剪贴板上。
以下适用于我:
$("textarea").on("cut", function(){
alert(this.value.substring(this.selectionStart, this.selectionEnd));
})
值得注意的是,jQuery中不推荐bind
,您应该使用on
。试试片段:
$("textarea").on("cut", function() {
alert(this.value.substring(this.selectionStart, this.selectionEnd));
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea></textarea>
答案 2 :(得分:0)
我的答案得到了解决方案。在我使用的ace编辑器中有一个editor.on('cut',function(e))
editor.on("cut", function(e){
console.log('Cut Detected');
console.log(editor.selection.getRange());
});