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>
Który edytor używasz? Czy to jest istniejące czy jedno z twoich? –
Czy jest to tylko dla przeglądarek Gecko? Powinieneś być testem bardziej niż Ty. Skąd pochodzi obiekt * wiatru * w 'addRange (wind.range)'? – RobG
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