JS

2011-07-18 19 views
5

için daha sonra kullanmak üzere bir seçim kaydetme Bir küçük metin bloğu için sözdizimi vurgulayan designMode ile iframe'de zengin bir metin editörü var. Anahtarlamadaki vurgulamayı güncellemeyi isterim, ancak DOM ile karıştırmak çerçevenin bulanıklaşmasına neden olur, böylece bir tuşa her basışınızda kaybolur ve artık yazamazsınız. Eğer ayrıştırıcı, çarpanın nerede olduğunu hatırlayabiliyorsa ve iframe tekrar odaklanıp çarpanı değiştiriyorsa bu bir sorun olmaz. Ben getSelection() ve akrabalarını okudum, ama görünüşte onkeyup seçimi en azından Chrome - getSelection()'u bir onkeyup içinde çağırarak seçimi kaldırır, her zaman boş bir seçim verir. Bunun etrafında bir yolu var mı?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

Hangi editörü kullanıyorsunuz? Bu mevcut bir mi yoksa kendi mi? –

+1

Bu sadece Gecko tarayıcıları için mi? Sizden daha fazla özellik testi yapmalısınız. * Wind * nesnesi 'addRange (wind.range)' 'dan nereden geliyor? – RobG

+0

Bu, herkes için ideal olarak tüm tarayıcılarda (IE hariç) Chrome'da yazıyorum. Rüzgâra gelince, benim hatam - rüzgar, iframe için pencere nesnesini tutuyordu, daha önce fark ettim ki, fonksiyonun çerçevenin kendisinde olması daha kolay olurdu. Yukarıdan kaldırıldı; Hata olmasa da orada olmamalıydı. – Monchoman45

cevap

0

Ben başka kod vurgulayıcı kullanmak öneriyoruz:

Bu aldığım şeydir. Örneğin CodeMirror gibi.

+0

Bu betik yapmam gerekeni yapmak için görünmüyor, kullanmak istediğim kendi ayrıştırıcım var. Buradaki problem, onkeyup dinleyicide bir menzilin kaydedilip kaydedilmeyeceğini veya bunu başarmanın daha iyi bir yolu olup olmadığını bilmem gerek. – Monchoman45