Тема: 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 и пр.) положительного эффекта не дали. Не знает ли кто простое и органичное решение, или мой костыль рулит?

