Начало и конец выделения в HTML
Есть обычная текстовая страница, отданная сервером из БД, не WYSIWYG-редактор.
Выделяем какой-то текст, появляется всплывающее меню: ![]() По нажатию на пункт всплывающего меню, на клиенте выделенный текст визуально становится ссылкой, адрес которой получаю с помощью XMLHttpRequest .Вопрос: каким образом указать серверу начало и конец выделения, чтобы он мог проделать аналогичные действия со страницей в БД? HTML отправлять бесполезно, браузеры его по своему форматируют, да и это не textarea , чтобы точно определить количество символов с начала блока. Есть идеи? |
Свойство anchorOffset объекта Selection?
|
anchorOffset — смещение начала выделения относительно anchorNode, которым может быть текстовый узел.
Можно поставить левую границу Range в начало контейнера с текстом, а правую — в начало выделения и получить range.toString().length, но браузеры даже количество пробельных символов по разному возвращают. Пока думаю отправлять этот кусок на сервер и там приводить его к общему виду с текстом из БД, удаляя все теги, дублирующиеся пробелы, переносы строк, как-то высчитывать разницу и добавлять ссылку в HTML, как оно там будет работать на сервере уже не моя проблема, мне нужно однозначно указать, какой участок текста поместить в тег. |
Octane, а может, лучше сделать обрамление на JS, а потом весь кусок отправить на сервер и там уже просто сохранить в БД? Смысл еще что-то делать на сервере?
|
var start = (elem.textContent||elem.innerText).search(selectedText), finish = start+selectedText.length; |
e1f,
да думал над этим, но мало ли что пользователь может отправить на сервер, нужна только возможность добавить ссылку, а не изменить весь текст. Тогда придется сравнивать видоизмененный браузером HTML с исходным кодом. Определить, что там только вставлена ссылка и никакой текст больше не тронут, и только тогда перезаписывать его в БД. Это реально?) Nekromancer, как посчитать символы я знаю, проблема в том, что на клиенте и на сервере разный HTML-код получается и однозначно указать, куда вставить тег в HTML-код на сервере, не знаю как. |
Octane, Если не нужен полный wysiwyg, тогда конечно, не стоит :)
Насколько я понимаю, выделенный текст может быть и "между тегами", а в базе хранится кусок html-разметки? |
Octane,
ну вот тут мы считаем не html, а сам текст.. разве с базой так же нельзя поступить, "забить" на теги? |
К примеру на сервере в БД такой код:
<div class="post" id="_12345"> <p>Lorem Ipsum is <strong>simply</strong> dummy text.</p> </div> Internet Explorer отдаст в JavaScript его уже в таком виде: <DIV id=_12345 class="post"><P>Lorem Ipsum is <STRONG>simply</STRONG> dummy text.</P></DIV> Добавляем в дерево ссылку и получаем такой HTML-код: <DIV id=_12345 class="post"><P>Lorem <A href="…">Ipsum is <STRONG>simply</STRONG> dummy</A> text.</P></DIV> Вот и нужно сказать серверу, чтобы он тоже самое сделал с кодом в БД :) |
Хорошо, а нельзя никак сохранить исходный html в js, когда пользователь выделит текст - вычислить это место и вставить в сохранённом html ссылку. И уже дальше так оперировать?
|
Часовой пояс GMT +3, время: 18:44. |