Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Получение слова "из-под каретки" (https://javascript.ru/forum/events/30239-poluchenie-slova-iz-pod-karetki.html)

Apollo_440 28.07.2012 19:07

Получение слова "из-под каретки"
 
Встала необходимость выделить слово на месте каретки в редактируемом диве. В гугле ничего подходящего не нашел. Не подскажете как это осуществить?

Deff 28.07.2012 21:50

Apollo_440,
Выложите HTML пример

Apollo_440 28.07.2012 22:19

Примерно так:

<div style="border:1px solid #AAA;width:350px;height:200px" contenteditable>
Здесь текст, много т<u>екста с ф</u><strong><u>ормат</u>ирован</strong>ием
</div>


Необходимо получить слово, на котором есть каретка, а затем его выделить, ну или хотя бы alert ом показать что за оно.

Deff 28.07.2012 22:55

http://javascript.ru/forum/dom-windo...tml#post129381
Ну туть что-то есть

Apollo_440 30.07.2012 01:01

Кажись там описано только как получить каретку в contenteditable. Вы может меня не совсем поняли, но мне нужно получить слово, в котором мигает каретка. В результате должно получиться так, как будто я сделал doubleckick на слове (в браузерах оно сразу же выделяется). Вот такое мне необходимо. То есть самая главная задача - получить начало и конец слова в котором каретка.

Deff 30.07.2012 01:05

Цитата:

Сообщение от Apollo_440
как получить каретку в contenteditable

ну читаете весь контент - определяете положение каретки - далее регуляркой - определяете ближайшие пробелы в контенте от положения каретки - это и есть границы слова...

function FindWord(str,pos) { //alert(' pos='+pos+'\n'+str)
 var L =str.length;
 var Le =L-pos;
 //1 стоим не на пробеле ? //
if(str.substring(pos,pos+1).search(/\s/i)!=-1)return false;
//2 определяем начало слова
 for(var i=pos; i>-1; i--){//alert(i)
    if(str.substring(i,pos).search(/\s/i)!=-1)break;
 }
 var st = 0;if(i)st=i+1;
 for(var i=pos; i<L; i++){//alert(i)
    if(str.substring(i,pos).search(/\s/i)!=-1)break;
 }
 var end = L-1;if(i)end=i-1;
 return str.substring(st,end)
}
var str = 'ну читаете весь контент - определяете положение каретки - далее регуляркой - определяете ближайшие \
пробелы в контенте от положения каретки - это и есть границы слова...'
var pos=39; 

alert(FindWord(str,pos))

Apollo_440 30.07.2012 01:39

Благодарю. Думаю это то, что надо мне.

Deff 30.07.2012 01:51

Цитата:

Сообщение от Apollo_440
Проблема в том, что слово может разбиваться на несколько сегментов с помощью тегов, а это означет, что будет трудно получить значение, ведь надо знать где начинается и заканчивается слово. Это я показывал в примере:

Задача тож оч подобная - завтра выложу - вместо пробелов тестим нахождение внутри угловых скобок - если - да находим края тега ... далее всё просто

Apollo_440 30.07.2012 14:43

Есть же конечно стандартные способы, такие как expand (функция называется в каждом браузере по-разному), например seRange.expand("word") (ie), в лисе своя... Вот только в опере такого ненту :(, иначе проблема канула бы в лету.

Deff 30.07.2012 14:59

Apollo_440,
К вечеру сделаю - сейчас занят (*Положение каретки буду считать якобы уже считанным)


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