当模糊事件发生时,如何备份元素上的选定文本?

时间:2012-07-06 13:24:15

标签: javascript text selection onblur

我尝试在JavaScript中备份TextRange对象以便稍后恢复它,所以要做到这一点我试图将一个函数链接到模糊事件但是当调用该函数时我的选择已经丢失:/我怎么能运行模糊事件之前的特定行为?或者你有另一个解决方案来做这个伎俩吗?

我试过这个:

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:/但如果我在函数中写了一个“警告”,我成功地在模糊函数中获取我的文本选择:/我如何捕获模糊事件以及什么可以我是做这种操作吗?我是javascript的初学者。

非常感谢,我在这个问题上花了很多时间......:/

2 个答案:

答案 0 :(得分: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;

DEMO.

答案 1 :(得分: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