Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Установка курсора в div с contentEditable=true (https://javascript.ru/forum/dom-window/21239-ustanovka-kursora-v-div-s-contenteditable%3Dtrue.html)

fr0st1k 02.09.2011 10:10

Установка курсора в div с contentEditable=true
 
Здраствуйте. Подскажите, пожалуйста, каким образом можно установить курсор мыши в конец текста div'а с contentEditable=true.

GuardCat 10.01.2012 16:48

Апну. Есть способы это сделать?

Nekromancer 10.01.2012 17:47

Range, не?

da_ff 11.01.2012 11:34

Поищите на форуме, кучу раз вопрос поднимали.

GuardCat 11.01.2012 11:51

Nekromancer, ни разу не сталкивался (самообучение любителя вещь непредсказуемая), спасибо.

Почитал и попробовал использовать, но пока безуспешно. В примере, при нажатии в div клавиши влево, курсор должен устанавливаться в определённое место. Функция вызывается, ошибок нет. эффекта нет. Подскажете где ошибся?
<!DOCTYPE HTML>
<html>
<body>   
  <div contenteditable onkeyup = "test.call(this)">0123456789</div>
  <script>
    function test(e) {
      e = e || event;
      var range = document.createRange()
      if (e.keyCode == 37) {
        range.setStart(this.childNodes[0]/* Это же textNode? */, 2);
        range.setEnd(this.childNodes[0], 2);
      }
    }
  </script>
</body>
</html>

Похоже, выделяется текст успешно, можно его получить как range.toString(), но курсор положения не меняет (chrome 16).

trikadin 11.01.2012 14:45

GuardCat, вы правильно сделали range-объект, но неправильно ставите курсор) Точнее, совсем его не ставите. А ещё у вас ошибка с передачей event - вы его не передаёте) Вот это может вам помочь:

<!DOCTYPE HTML>
<html>
<body>  
  <div contenteditable onkeyup = "test.call(this, event)">0123456789</div>
  <script>
    function test(e) {
      var range = document.createRange()
      if (e.keyCode == 37) {
        range.setStart(this.childNodes[0]/* Это же textNode? */, 2);
        range.collapse(true);// совмещаем конец и начало в стартовой позиции
        var sel= window.getSelection();
        sel.removeAllRanges();
        sel.addRange(range);
      };
    };
  </script>
</body>
</html>


Но данный код - не для IE. Читайте статью.

GuardCat 11.01.2012 16:02

Цитата:

Сообщение от trikadin
ошибка с передачей event - вы его не передаёте

Позор на мою седую голову...
trikadin, спасибо за ответ и статью. Разобрался.

trikadin 11.01.2012 16:06

Цитата:

Сообщение от GuardCat
Позор на мою седую голову...

Да ладно, бывает) Я вот недавно for'овым циклом детей у элемента удалял) Долго думал, в чём ошибка)


Часовой пояс GMT +3, время: 01:25.