1

後で復元するためにJavaScriptでTextRangeオブジェクトをバックアップしようとしているので、これを行うために関数をblurイベントにリンクしようとしましたが、関数が呼び出されたときに選択がすでに失われています:/前に特定の動作を実行するにはどうすればよいですかぼかしイベント?または、このトリックを行うための他の解決策がありますか?

私はこれを試しました:

this._editableFrame._elt.onload= function(oEvent){
    oEvent.srcElement.contentDocument.body.onblur=function(oEvent) {
    this._sel=this.document.selection.createRange().duplicate(); } 
    /*alert(this._sel.text);*/
    return true; 
};

そして、これを行うと、TextRangeが空になります:/しかし、関数に「アラート」を書き込むと、blur関数でテキスト選択を取得できます:/blurイベントをキャプチャするにはどうすればよいですか?このタイプの操作?私はJavaScriptの初心者です。

どうもありがとう、私はこの問題に多くの時間を費やしました...:/

4

2 に答える 2

1

IE だけについて話しているように見えるので、IE のみのbeforedeactivateイベントを使用することをお勧めします。blurイベントが遅すぎて、イベントが発生するまでに選択内容が失われています。

this._editableFrame._elt.onload = function(oEvent){
    oEvent.srcElement.contentDocument.body.onbeforedeactivate=function(oEvent) {
        this._sel=this.document.selection.createRange().duplicate();
    };
};

同様の質問に対する私の答えは次のとおりです。

https://stackoverflow.com/a/5338889/96100

于 2012-07-06T20:32:13.400 に答える
1

ぼかしイベントは完璧ではないと思います。これが役立つかもしれません

var selectedText = "";
function getSelectedText()
{
    if (typeof window.getSelection != "undefined") {
        selectedText = window.getSelection().toString();
    }
    else if (typeof document.selection != "undefined" && document.selection.type == "Text")
    {
        selectedText = document.selection.createRange().text;
    }
}

function show_selected_text()
{
     getSelectedText();
    if(selectedText) alert(selectedText);
}

document.onmouseup = show_selected_text;
document.onkeyup = show_selected_text;

デモ。

于 2012-07-06T13:45:21.963 に答える