Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Установка положения курсора в контейнере div (https://javascript.ru/forum/dom-window/70886-ustanovka-polozheniya-kursora-v-kontejjnere-div.html)

health_dim 09.10.2017 17:56

Установка положения курсора в контейнере div
 
Добрый день!

Новичок. Изучаю Javascript.

Есть такой скрипт устанавливающий положение курсора в input Элементах (<input type="text">, <textarea>...).

<!DOCTYPE html>

<html>
  <head>
    <title>Range</title>
  </head>
  <body>
    <input id="in" type="text" value = "1111111111111111111">
  </body>
</html>
<script>
  function setSelectionRange(input, selectionStart, selectionEnd) {
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}
 
function setCaretToPos (input, pos) {
  setSelectionRange(input, pos, pos);
}

setCaretToPos(document.getElementById("in"), 4);

</script>


Можно ли сделать так чтобы код работал c <div contenteditable></div>

Не срабатывает следующая строчка кода:

input.setSelectionRange(selectionStart, selectionEnd);

<!DOCTYPE html>

<html>
  <head>
    <title>Range</title>
  </head>
  <body>
    <div id="in" contenteditable>111111111111111111111</div>
  </body>
</html>
<script>
  function setSelectionRange(input, selectionStart, selectionEnd) {
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}
 
function setCaretToPos (input, pos) {
  setSelectionRange(input, pos, pos);
}

setCaretToPos(document.getElementById("in"), 4);

</script>

рони 09.10.2017 18:46

health_dim,
<!DOCTYPE html>

<html>
  <head>
    <title>Range</title>
  </head>
  <body>
    <div id="in" contenteditable>111111111111111111111</div>

<script>
  function setCaretToPos(elem, pos) {
var range = document.createRange();
var sel = window.getSelection();
range.setStart(elem.childNodes[0], pos);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}

setCaretToPos(document.getElementById("in"), 4);

</script>
 </body>
</html>

health_dim 09.10.2017 22:45

Огромное спасибо!

Пытался разобраться по https://learn.javascript.ru/range-textrange-selection

Верны ли комментарии:

range.collapse(true);  // граничные точки в одном месте кода
sel.removeAllRanges(); //строку можно опустить т.к. в общем-то выделения кода не было
sel.addRange(range); //установка курсора

рони 10.10.2017 00:50

Цитата:

Сообщение от health_dim
Верны ли комментарии:

да


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