Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Выделение текста в текстовом поле. Как снять выделение с пробела вконце? (https://javascript.ru/forum/events/8812-vydelenie-teksta-v-tekstovom-pole-kak-snyat-vydelenie-s-probela-vkonce.html)

Roman Koff 14.04.2010 10:56

Выделение текста в текстовом поле. Как снять выделение с пробела вконце?
 
Подскажите, пжалста, кто знает ...

Есть текстовое поле в которое вводится текст.

Если мышкой выделять по словам в тексте, то выделяется также пробел в конце последнего выделенного слова, при этом, если слово ограничено знаками припинания, то они не выделяются (за исключением одинарных кавычек в IE).

Какое событие и как надо модифицировать, чтобы выделение пробела и одинарных кавычек не происходило?

exec 14.04.2010 15:41

Поставить contentEditable = true, затем при каждом нажатии клавиши заменять кавычки на это: <span unselectable="on">'</span>.

Roman Koff 14.04.2010 21:06

Спасибо, конечно, но мимо кассы.

Есть текстовое поле, в которое я ввожу текст. Надо чтобы при выделении не захватывался последний пробел у выделенных слов. ХТМЛ тут не при чем.

Алогритм, как я представляю, следующий:
событие выделения -- проверить, является ли последний символ в выделении пробелом, если да, сдвинуть маркер конца выделения на 1 позицию назад.

Конечно, возможно это бредовая задача, но в работе очень напрягает все время вручную фиксить окончание выделения.

PeaceCoder 14.04.2010 22:37

Цитата:

Сообщение от Roman Koff
Конечно, возможно это бредовая задача, но в работе очень напрягает все время вручную фиксить окончание выделения.

а проще: в скрипте делать trim()

Roman Koff 15.04.2010 09:57

Я яваскрипт пару дней назад начал изучать. Вопрос очевиден, куда надо трим засунуть?

Финальная задача такая:
При выделении слов в поле редактора я могу обернуть их (через функции редактора) в тег. Но при стандартном выделении, ессно, захватывается еще и пробел, который там нафиг не нужен. Это очень бесить. Приходится при редактировании постоянно на клавиру переключатьсо.

Пример:
- "Южно-эфиопский грач увёл мышь за хобот на съезд ящериц." -- исходный текст в редакторе
- "Южно-эфиопский |грач увёл мышь за |хобот на съезд ящериц." -- вид текста при выделении
- "Южно-эфиопский <em>грач увёл мышь за </em>хобот на съезд ящериц." -- результат "обертки" в тег

Как должно бы быть:
- "Южно-эфиопский |грач увёл мышь за| хобот на съезд ящериц." -- вид текста при выделении
- "Южно-эфиопский <em>грач увёл мышь за</em> хобот на съезд ящериц." -- результат "обертки" в тег

Riim 15.04.2010 10:15

Цитата:

Сообщение от Roman Koff
Я яваскрипт пару дней назад начал изучать

и сразу с выделениями связались, вот же не повезло вам, наверное возненавидете js после этого.

Roman Koff 15.04.2010 10:22

Просто решил привентить Markitup к системе и тут наткнулся на эту фичу современных редакторов. Обратил внимание, что это правило распространяется на большинство редакторов, например ВОРД, НОТЕПАД ...

Интересно, на других платформах также? (щас нет возможности проверить).

На самом деле, я понял, что в данном случае -- это как с мельницами сражаться. Впринципе, всеравно все работает. Так для общего развития интересно, как можно решить данную задачу ...

e1f 15.04.2010 10:28

Roman Koff, для интереса заглянул в свои OpenOffice, AkelPad и Geany -- выделяют по слову, без пробела. Notepad -- как идиот. MS Word -- нет возможности проверить. Навскидку, для чего это зделано мелкомягкими -- чтобы, если Вы выделили слово, сделали его, к примеру, bold, то потом Вы и дальше будете писать bold'ом. Говноидея.

Опера 10.51 выделяет нормально, Firefox 3.6.3 -- опять же как идиот.

Платформа: Win 7

Цитата:

Сообщение от Roman Koff (Сообщение 51686)
На самом деле, я понял, что в данном случае -- это как с мельницами сражаться. Впринципе, всеравно все работает. Так для общего развития интересно, как можно решить данную задачу ...

Когда оборачиваете в тег, учитывайте, что пробелы в конце нужно "вернуть на место", вот и все.

axelshow 17.04.2010 08:08

:)

Roman Koff 20.04.2010 10:15

Ну так и сделал, пример, если кому нужно будет:
function setTag(s, beg, end) {
	var se = (s[s.length - 1] == ' ') ? ' ' : '';
	return beg + Trim(s) + end + se;
}


Возник еще интересный момент, может кто сталкивался:

Если в редактор (испытывал на CKEditor и Markitup) вставить код спецсимвола, например: &nbsp; &ndash; &laquo; и т.п., то, после нескольких отправок (сохранений) код символа в исходнике превращается в фактическое значение (литерал).

Что хочется: 1. как прибить это "превращение" (т.е. чтобы в исходнике всегда был код, а не литерал); 2. как из JS вставлять в документ литерал по коду (принудительно делать рендеринг кода в литерал).


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