Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Цитируем содержание блока ещё раз


Автор: Dollor 20.10.2007, 18:14
Делаю форум. Необходимо сделать функцию цитирования. Собственно..делаю smile
Имеем, например, блок:
Код

<div id="1">текст</div>

и кнопку что-то вроде:
Код

<a onclick="quote("1");">цитировать</a>

И форму типа:
Код

<textarea name="text" type="text" id="text"></textarea>


Смысл: тыкаем на кнопку цитировать, вызываем скрипт которые дублиурет содрежание из блока с id 1 в текстовую форму. Такое возможно сделать? Как? Было бы хорошо ещё и то, чтобы и вниз к этой форму textarea перребрасывало сразу...

Автор: vasac 20.10.2007, 19:04
Видите над сообщением кнопку "быстрая цитата"? Оно?

Автор: Dollor 20.10.2007, 19:33
Цитата(vasac @  20.10.2007,  19:04 Найти цитируемый пост)
Видите над сообщением кнопку "быстрая цитата"? Оно?


Нет, не совсем то. Так как многие люди так и не поймут как этим пользоваться smile Хочется сделать просто при клике на текст этот чтобы в форму добавлялся весь текст сообщения...

Автор: dsCode 20.10.2007, 19:45
Dollor, ну так а в чем проблема? Берете innerHTML из этого дива, делаете необходимые преобразования (заменяете br'ы на \n, убираете экранирование спецсимволов и т.д.) и вставляете все это в textare'ю. Можно сделать для этого "дублирующий" объект с сообщениями на странице, чтобы не innerHTML брать, а сразу из объекта (тогда не придется делать преобразования - <span style="font-weight: bold;">test</span> на test и т.д.)

Автор: Dollor 20.10.2007, 20:02
Алгоритм то мне ясен и он очень прост. Но я программист на php, с явой практически не знаком. Меня как раз и интересует процедура: взять из дива и вставить в textarea

Автор: dsCode 20.10.2007, 20:22
Dollor

Код

document.getElementById('text').value += document.getElementById('1').innerHTML;


но это, еще раз повторю, нужно будет дополнить различного рода преобразованиями (или - держать "дублирующий" объект сообщений и брать данные не из innerHTML div'a, а из этого объекта).

Автор: Dollor 20.10.2007, 20:50
Цитата(dsCode @  20.10.2007,  20:22 Найти цитируемый пост)
держать "дублирующий" объект сообщений и брать данные не из innerHTML div'a, а из этого объекта

Если так делать, то трафик будет увеличен в несколько раз. Сам представь, каждое сообщение с форума будет загружаться два раза (хоть и выводится то один раз, но скачиватсья два раза) это ладно если не большие сообщения, а ведь бывает, что пишут большие тексты...

Автор: dsCode 20.10.2007, 23:46
Dollor
Цитата(Dollor @  20.10.2007,  20:50 Найти цитируемый пост)
Если так делать, то трафик будет увеличен в несколько раз. Сам представь, каждое сообщение с форума будет загружаться два раза (хоть и выводится то один раз, но скачиватсья два раза) это ладно если не большие сообщения, а ведь бывает, что пишут большие тексты... 

этого можно было не объяснять smile 

Автор: Dollor 21.10.2007, 09:05
Можешь всё-таки помочь как-нибудь с этим?

Автор: dsCode 21.10.2007, 14:07
Dollor
Цитата(Dollor @  21.10.2007,  09:05 Найти цитируемый пост)
Можешь всё-таки помочь как-нибудь с этим?

с чем? я уже два раза написал, как надо делать (можно сделать). Что конкретно не понятно? Преобразования? .split('<br>').join('\n')split('&amp;').join('&') и т.д. Правда, когда будут сложные блоки ("цитата в цитате в цитаце в коде и снова в цитате, в ней ссылки и изображения и смайлики") -  тут сложнее реплейсы будет использовать (если вообще возможно - смотря как стили нарисованы). Вот, альтернативой и было предложено хранить "дублирующий" объект, но это, естественно, жрет траф. Тогда, кстати, самое оптимальное наверное, будет посыл аякс запроса для получения неформатированного текста из базы и вставка его в текстарию (все равно получается дублирующий траф, но уже для "одного" сообщения, а не всех). Но, для цитаты, это как-то слишком. Другое дело, если у тебя "edit in place" функция - тогда удобно - нажимаем "edit" и тут же на месте текста появляется форма для редактирования.

Автор: Dollor 21.10.2007, 15:12
Тогда наверное попробую с аяксом как раз и сделать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)