ユーザーがテキストを選択したら、選択したテキストの下にツールバーを表示しようとしています。私は多くのスタックオーバーフローの回答を閲覧しましたが、思いついたのは以下のコードです。
ユーザーがマウスのクリックだけでなく、キーボードの選択 (alt+shift+arrow キー)でテキストを選択したときに、ツールバーをトリガーしたい。このテキストエディタとほとんど同じです。
このgetSelected()
関数は、マウスまたはキーボードの選択で選択されたテキストを問題なく返します。しかし、その範囲にダミー要素を挿入しようとすると、常にテキストエリアの上部にダミーが挿入されます (ダミーが挿入される場所を確認するために、「バー」というテキストを追加しました) 。
と何か関係があると思います.getRangeAt(0)
。選択したテキストの位置を取得したい(ダミーを挿入して<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/
何か案は?ありがとう!