Учитывая, что DIV w contenteditable, как найти позицию курсора для извлечения подстроки - PullRequest
1 голос
/ 03 ноября 2011

Дано:

<div id="comment_content_new" contenteditable="true" tabindex="0">
  <p>
     <span class="tag" id="tag30">theTag</span>&nbsp;@rac
  </p>
</div>

Когда курсор находится после c в @rac, я могу получить позицию курсора с помощью:

saveRange = window.getSelection (). GetRangeAt (0);

Что обеспечивает:

Range
 collapsed: true
 commonAncestorContainer: Text
 endContainer: Text
 endOffset: 5
 startContainer: Text
 startOffset: 5

То, что я хочу сделать, это дать позицию курсора, заставить все двигаться назад до первого @ относительно позиции курсора. Учитывая, что диапазон дает мне неправильный курсор, я не могу использовать .text () так, как пытался, что-то вроде:

text = $('#comment_content_new p').text();
trigger = '@';
lastTriggerPosition = text.substring(0, cursorPosition).lastIndexOf(trigger);

Есть идеи, как мне это осуществить? Я понимаю, что это не легко! спасибо

Ответы [ 2 ]

1 голос
/ 03 ноября 2011
var str = text.substring(0, cursorPosition); // assumes this will give you the text in the div starting at the beginning and ending at the current cursor posistion.
var splitArr = str.split("@"); // splits the string into array of substrings with '@' as a delimiter.
var result = splitArr.pop(); // returns last item of array

Как это?

String.split: http://www.w3schools.com/jsref/jsref_split.asp
Array.pop: http://www.w3schools.com/jsref/jsref_pop.asp

0 голосов
/ 18 августа 2012

Если вам нужно надежное и проверенное кросс-браузерное решение, попробуйте http://code.google.com/p/rangy/

Среди методов есть один, чтобы получить и установить позицию каретки.

...