2011-07-18 16 views
5

Mam edytor tekstu sformatowanego w elemencie iframe z interfejsem designMode, który wykonuje podświetlanie składni dla małych bloków tekstu. Chciałbym zaktualizować podświetlanie na keyupie, ale rozmowa z DOM powoduje rozmycie ramki, więc za każdym razem, gdy naciskasz klawisz, kurtyna znika i nie możesz już pisać. Nie stanowiłoby to problemu, gdyby parser mógł zapamiętać, gdzie znajduje się kurtyna, a następnie ponownie ustawić iframe i zastąpić go. Czytałem na getSelection() i jego krewnych, ale najwyraźniej onkeyup usuwa zaznaczenie, przynajmniej w Chrome - wywołanie getSelection() wewnątrz onkeyup zawsze daje wybór zerowy. Czy istnieje sposób obejścia tego?Zapisywanie zaznaczenia do późniejszego wykorzystania w JS

To jest to, co mam:

<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

Który edytor używasz? Czy to jest istniejące czy jedno z twoich? –

+1

Czy jest to tylko dla przeglądarek Gecko? Powinieneś być testem bardziej niż Ty. Skąd pochodzi obiekt * wiatru * w 'addRange (wind.range)'? – RobG

+0

To jest edytor, który sam piszę w Chrome, chociaż najlepiej dla wszystkich przeglądarek (z wyjątkiem IE). Jeśli chodzi o wiatr, mój błąd - wiatr zwykle trzymał obiekt okna dla elementu pływającego, zanim zdałem sobie sprawę, że łatwiej będzie mieć funkcję wewnątrz samej ramki. Usunięto z góry; nie powinno tam być, chociaż nie był to błąd. – Monchoman45

Odpowiedz

0

Polecam użyć innego kodu wyróżnienia. Na przykład CodeMirror.

+0

Ten skrypt nie wydaje się robić tego, czego potrzebuję, mam własny parser, którego chciałbym użyć. Problem polega na tym, że muszę wiedzieć, czy możliwe jest zapisanie zakresu w słuchaczu onkeyup, czy jest lepszy sposób na osiągnięcie tego. – Monchoman45

Powiązane problemy