Как я могу сделать резервную копию выделенного текста на элементе, когда происходит событие размытия?

Я пытаюсь сделать резервную копию объекта TextRange в JavaScript, чтобы восстановить его позже, поэтому для этого я попытался связать функцию с событием размытия, но когда функция вызывается, мой выбор уже потерян: / Как я могу запустить определенное поведение ДО событие размытия? Или у вас есть другое решение, чтобы сделать этот трюк?

Я пробовал это:

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.

Большое спасибо, я потратил много времени на эту проблему... :/


person BlackMario    schedule 06.07.2012    source источник
comment
Можете ли вы показать нам, что вы пробовали? Кстати, вы всегда можете обновить некоторую переменную global с фактическим выбором, поэтому вам нужно будет зафиксировать событие размытия.   -  person antyrat    schedule 06.07.2012
comment
Я пробовал это: 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.   -  person BlackMario    schedule 06.07.2012
comment
пожалуйста, отредактируйте свой вопрос, чтобы включить свой код; не публикуйте его в качестве комментария, так как его труднее читать и с меньшей вероятностью его увидят.   -  person jackwanders    schedule 06.07.2012


Ответы (2)


Я думаю, что событие размытия не идеально, это может вам помочь

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;

ДЕМО.

person The Alpha    schedule 06.07.2012
comment
Спасибо за ваш ответ, с этим мне удалось реализовать одно временное решение, чтобы добиться цели, и я могу продолжить свою работу :) - person BlackMario; 06.07.2012

Поскольку вы, кажется, говорите только о IE, я предлагаю вам использовать событие beforedeactivate только для IE. Событие 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

person Tim Down    schedule 06.07.2012