У меня есть текстовый редактор в iframe с designMode, который делает подсветку синтаксиса для небольших блоков текста.Я бы хотел, чтобы он обновлял подсветку для keyup, но при работе с DOM рамка становится размытой, поэтому каждый раз, когда вы нажимаете клавишу, курсор исчезает, и вы больше не можете печатать.Это не было бы проблемой, если бы парсер мог вспомнить, где находится каретка, а затем перефокусировать фрейм и заменить каретку.Я прочитал о getSelection()
и его родственниках, но, очевидно, onkeyup удаляет выделение, по крайней мере, в Chrome - вызов getSelection()
внутри onkeyup всегда дает нулевое выделение.Есть ли способ обойти это?
Вот что у меня есть:
<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>