1

Тема: HTA: ввод в позицию курсора contentEditable элемента

В принципе, contentEditable даёт неплохие возможности для редактирования. Проблемы начались, когда возникла необходимость "на лету" заменять некоторые вводимые символы. Вот упрощённый пример:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>contentEditable</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=8" />
  <hta:application />
</head>
<body><span></span></body>
<script type="text/jscript" language="JScript">
  with(document.getElementsByTagName('span')[0]){
    contentEditable=true;
    focus();
  }

  document.onkeypress=function(){
    var u,v=document.selection;
    if(!(event.altKey||event.ctrlKey)){
      switch(event.keyCode){
       case 13:return(false);
       case 32:u=String.fromCharCode(0x2007);break; // пробел
       case 45:u=String.fromCharCode(0x2212);break; // минус
       default:u=String.fromCharCode(event.keyCode);
      }
      v.createRange().text=u;
/*
      if(v.type=='Text'){
        with(new ActiveXObject('WScript.Shell')){
          sendKeys('{RIGHT}');
        }
      }
*/
      return(false);
    }
  };
</script>

Вводит и заменяет нормально, но, если выделить где нибудь в середине уже введённого текста несколоко символов и продолжить ввод с клавиатуры, выделения уже не видно, а Range, видимо, остаётся - меняется первый введённый символ. Решил проблему костылём - закомментирован в коде, а игры с методами объектов selection и range (empty clear collapce и пр.) положительного эффекта не дали. Не знает ли кто простое и органичное решение, или мой костыль рулит?