Как получить положение курсора клавиатуры при наборе текста? - PullRequest
0 голосов
/ 14 апреля 2020

Я вижу, что уже есть много ответов для достижения этого с помощью selectionStart. Но, к сожалению, большинство из них относится к value поля, а не к text.

У меня есть код ниже, но я получаю Undefined

$(document).ready(function() {
  document.getElementById('span_id_1').addEventListener('keyup', e => {
    console.log('Caret at: ', e.target.selectionStart)
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="span_root" type="text" id="span_id_1" contenteditable="true">Input here</div>

1 Ответ

0 голосов
/ 14 апреля 2020

Использование этого Получить позицию индекса ContentEditable каретки

Я получил это

function getCaretPosition(editableDiv) {
  var caretPos = 0,
    sel, range;
  if (window.getSelection) {
    sel = window.getSelection();
    if (sel.rangeCount) {
      range = sel.getRangeAt(0);
      if (range.commonAncestorContainer.parentNode == editableDiv) {
        caretPos = range.endOffset;
      }
    }
  } else if (document.selection && document.selection.createRange) {
    range = document.selection.createRange();
    if (range.parentElement() == editableDiv) {
      var tempEl = document.createElement("span");
      editableDiv.insertBefore(tempEl, editableDiv.firstChild);
      var tempRange = range.duplicate();
      tempRange.moveToElementText(tempEl);
      tempRange.setEndPoint("EndToEnd", range);
      caretPos = tempRange.text.length;
    }
  }
  return caretPos;
}

$(function() {
  $('#span_id_1').on('mouseup',function(e) { console.log('Caret at: ', getCaretPosition(this)) })
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="span_root"  id="span_id_1" contenteditable="true">Input here</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...