Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как установить правильную позицию курсора? (https://javascript.ru/forum/events/34740-kak-ustanovit-pravilnuyu-poziciyu-kursora.html)

platedz 18.01.2013 14:19

Спасибо за ответ, но меня в целом интересует только зачем firstChild в setStart и setEnd? Что передает первый параметр? Почему бы просто не передать document.getElementById("id"), вместо document.getElementById("id").firstChild,
в том же примере на
http://learn.javascript.ru/vydelenie...роме-ie-9

рони 18.01.2013 20:38

platedz,
Вариант ...
<!DOCTYPE HTML>
<html>
<body>
  <div contenteditable onkeyup = "test(this)">0123456789</div>
  <script>
  function getCaretPos(element) {
      element.focus();
      if (document.selection) {
          var sel = document.selection.createRange();
          var clone = sel.duplicate();
          sel.collapse(true);
          clone.moveToElementText(element);
          clone.setEndPoint('EndToEnd', sel);
          return clone.text.length;
      } else {
          return window.getSelection().getRangeAt(0).startOffset;
      }
      return 0;
  }

  function test(element) {
      var x = getCaretPos(element);
      var re = /([A-Za-z])/g;
      var str = element.childNodes[0].data
      if (str.search(re) > 0) x = str.search(re);
      str = str.toLocaleLowerCase().replace(re, '');
      element.childNodes[0].data = str;
      if (document.selection) { //
          var range = document.body.createTextRange();
          range.moveToElementText(element);
          range.collapse(true);
          range.moveStart('character', x)
          range.select();

      } else {
          var range = document.createRange();
          range.setStart(element.childNodes[0], x);
          range.collapse(true);
          var sel = window.getSelection();
          sel.removeAllRanges();
          sel.addRange(range);
      }
      element.focus();
  };
  </script>
</body>
</html>

platedz 18.01.2013 20:54

Спасибо, то что нужно, только бы еще разобраться, что и как работает, хотелось не просто тупо код вставить, а как бы понимать что и где?
Т.ч. все-таки больше интересует вопрос по поводу setStart и setEnd, и первого параметра, который он передает.


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