一旦用户选择了一些文本,我试图在一些选定的文本下显示一个工具栏。我浏览了许多 stackoverflow 答案,我能想到的最好的就是下面的代码。
我希望工具栏在用户不仅在鼠标单击而且在键盘选择 (alt+shift+箭头键)上选择一些文本时触发。很像在这个文本编辑器中。
该getSelected()
函数在鼠标或键盘选择时返回选定的文本。但是当我在那个范围内插入一个虚拟元素时,它总是在文本区域的顶部插入(我添加了一些文本,“bar”,以查看虚拟元素的插入位置) 。
我猜这与.getRangeAt(0)
. 我想获取所选文本的位置(插入 dummy <span>
)。
function getSelected(){
var t = '';
if(window.getSelection){
t = window.getSelection();
}else if(document.getSelection){
t = document.getSelection();
}else if(document.selection){
t = document.selection.createRange().text;
}
return t;//.toString()
}
$('#post_content').on('select',function(){
var range = getSelected().getRangeAt(0);
range.collapse(false);
var dummy = document.createElement("span");
// dummy.innerHTML = "bar";
range.insertNode(dummy);
var rect = dummy.getBoundingClientRect();
var x = rect.left, y = rect.top;
dummy.parentNode.removeChild(dummy);
alert(x + "/" + y);
});
查看 JSFiddle:http: //jsfiddle.net/aTq5q/
有任何想法吗?谢谢!