Сохранение выбора для последующего использования в JS - PullRequest
5 голосов
/ 18 июля 2011

У меня есть текстовый редактор в iframe с designMode, который делает подсветку синтаксиса для небольших блоков текста.Я бы хотел, чтобы он обновлял подсветку для keyup, но при работе с DOM рамка становится размытой, поэтому каждый раз, когда вы нажимаете клавишу, курсор исчезает, и вы больше не можете печатать.Это не было бы проблемой, если бы парсер мог вспомнить, где находится каретка, а затем перефокусировать фрейм и заменить каретку.Я прочитал о getSelection() и его родственниках, но, очевидно, onkeyup удаляет выделение, по крайней мере, в Chrome - вызов getSelection() внутри onkeyup всегда дает нулевое выделение.Есть ли способ обойти это?

Вот что у меня есть:

<iframe>
    <html>
        <head>
            <script>
                function parse() {
                    if(window.getSelection().type != 'None') {
                        var range = window.getSelection().getRangeAt(0);
                    }
                    var text = document.body.textContent;
                    //Parse text, output is stored in newtext
                    document.body.innerHTML = newtext;
                    document.body.focus();
                    if(range) {
                        window.getSelection().removeAllRanges();
                        window.getSelection().addRange(range);
                    }
                }
            </script>
        </head>
        <body onload="document.designMode = 'on'; document.onkeyup = parse;">
            Text entered appears here
        </body>
    </html>
</iframe>

Ответы [ 2 ]

0 голосов
/ 08 ноября 2011

не уверен, что вы открыты для использования JS-фреймворка, но у mootools есть несколько довольно полезных утилит для выбора (например, http://mootools.net/docs/more/Element/Element.Forms#Element:getCaretPosition)

0 голосов
/ 28 июля 2011

Я бы порекомендовал использовать другой подсветчик кода. Например, CodeMirror .

...