Начало выделения с элемента Contenteditable в JavaScript

Чтобы получить начальную позицию выделения из редактируемого содержимого элемента в JavaScript, вы можете использовать различные методы. Вот несколько подходов:

  1. Использование объекта Selection:

    function getSelectionStart(element) {
     var start = 0;
     if (window.getSelection) {
       var selection = window.getSelection();
       if (selection.rangeCount > 0) {
         var range = selection.getRangeAt(0);
         var preCaretRange = range.cloneRange();
         preCaretRange.selectNodeContents(element);
         preCaretRange.setEnd(range.startContainer, range.startOffset);
         start = preCaretRange.toString().length;
       }
     } else if (document.selection && document.selection.type !== 'Control') {
       var textRange = document.selection.createRange();
       var preCaretTextRange = document.body.createTextRange();
       preCaretTextRange.moveToElementText(element);
       preCaretTextRange.setEndPoint('EndToStart', textRange);
       start = preCaretTextRange.text.length;
     }
     return start;
    }
  2. Использование объекта диапазона:

    function getSelectionStart(element) {
     var range = window.getSelection().getRangeAt(0);
     var preCaretRange = range.cloneRange();
     preCaretRange.selectNodeContents(element);
     preCaretRange.setEnd(range.startContainer, range.startOffset);
     return preCaretRange.toString().length;
    }
  3. Использование объекта TextRange (для более старых версий Internet Explorer):

    function getSelectionStart(element) {
     var textRange = document.selection.createRange();
     var preCaretTextRange = document.body.createTextRange();
     preCaretTextRange.moveToElementText(element);
     preCaretTextRange.setEndPoint('EndToStart', textRange);
     return preCaretTextRange.text.length;
    }

Эти методы позволяют получить начальную позицию выделения внутри редактируемого элемента в JavaScript.