2011-07-18 14 views
5

私は、テキストの小さなブロックの構文強調表示を行うdesignModeのiframeにリッチテキストエディタを持っています。キーアップの強調表示を更新したいのですが、DOMを混乱させるとフレームがぼやけます。したがって、キーを押すたびにキャレットが消えて、もうタイプできなくなります。パーサーがキャレットがどこにあるかを覚えて、iframeを再フォーカスしてキャレットを置き換えることができれば問題はありません。私はgetSelection()とその親戚について読んだが、明らかにonkeyupは選択肢を削除した。少なくともChromeでは - onkeyupの中でgetSelection()を呼び出すと常にヌル選択が行われる。これを回避する方法はありますか?後でJSで使用するための選択肢を保存する

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

<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> 
+0

を持っていますか?これは既存のものですか、あなた自身のものですか? –

+1

これはGeckoブラウザ専用ですか?あなたは、あなたよりも機能テストが必要です。 * wind *オブジェクトは 'addRange(wind.range)'のどこから来ますか? – RobG

+0

これは私がChromeで自分自身を書いているエディターですが、IE以外のすべてのブラウザーにとって理想的です。風については、私の間違い - ウィンドウのオブジェクトをiframeのために保持するために風が使用されていたので、フレーム自体の中に関数を持たせる方が簡単でした。上記から削除されました。それはエラーではありませんでしたが、そこにはいけませんでした。 – Monchoman45

答えて

0

私はいくつかの他のコードの蛍光ペンを使用することをお勧めします。例えばCodeMirrorのようになります。

+0

そのスクリプトは、私がそれを行うために必要なことをしているようには見えません。私は自分のパーサーを使いたいと思います。ここでの問題は、onkeyupリスナーに範囲を保存することが可能かどうか、またはそれを達成するためのよりよい方法があるかどうかを知る必要があることです。 – Monchoman45

関連する問題