5

小さなテキストブロックの構文を強調表示するdesignModeを備えたiframeにリッチテキストエディタがあります。キーアップ時のハイライトを更新したいのですが、DOMをいじるとフレームがぼやけてしまい、キーを押すたびにカレットが消えて入力できなくなります。パーサーがキャレットの場所を覚えていて、iframeのフォーカスを再設定し、カレットを交換できれば、それは問題にはなりません。私はgetSelection()とその親戚を読みましたが、少なくともChromeでは、明らかにonkeyupが選択を削除しgetSelection()ます-onkeyup内で呼び出すと、常にnull選択が生成されます。これを回避する方法はありますか?

これは私が持っているものです:

<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>
4

2 に答える 2

0

他のコード ハイライターを使用することをお勧めします。たとえば、 CodeMirrorのように。

于 2011-07-28T15:57:52.813 に答える
0

あなたが JS フレームワークを使用できるかどうかはわかりませんが、mootools にはかなり気の利いた選択ユーティリティがいくつかあります (例: http://mootools.net/docs/more/Element/Element.Forms#Element:getCaretPosition ) 。

于 2011-11-07T20:34:20.257 に答える