Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.01.2014, 18:33
sst sst вне форума
Новичок на форуме
Отправить личное сообщение для sst Посмотреть профиль Найти все сообщения от sst
 
Регистрация: 06.03.2013
Сообщений: 5

Цитирование на форуме.
Добрый день коллеги!
Пытаюсь модернизировать механизм цитирования на форуме. Сейчас цитирование делается так: при выделении мышкой текста и нажатии на кнопку "Цитировать" в окне сообщения появляется выделенный текст в тегах цитаты. Нужно сделать так, чтобы если текст не выделен, в теги вставлялось все сообщение целиком, а не пустое место как сейчас. Во многих форумах это реализовано.
На взгляд всё очень просто. Но немного не хватет опыта для реализации. Пока не выходит.
Может есть у кого-нибудь опыт в решении подобных задачек? Буду благодарен за любую инфу!

Строка с ссылкой "Цитировать":
<a class=\"d3\" onmouseover=\"copyQN('".$pdata['p_uname']."','p".$pdata['p_id']."');\" href=\"javascript:pasteQ();\" ><span class=\"descr3\">"Цитировать"</a>");


в обработке сообщения принимают участие 2 ф-ции: copyQN и pasteQ();

function copyQN(name,id) {
  txt='';
  lname=name;
  if (document.getSelection) {txt=document.getSelection()}
  else if (document.selection) {txt=document.selection.createRange().text;}
  if (document.getElementById && !txt && document.getElementById(id).innerText) {txt=document.getElementById(id).innerText;}
  else if (document.getElementById && !txt && document.getElementById(id).textContent) {txt=document.getElementById(id).textContent;}
    txt='[q='+name+']'+txt+'[/q]\n';
}

function copyQ() {
  txt=''
  if (document.getSelection) {txt=document.getSelection()}
  else if (document.selection) {txt=document.selection.createRange().text;}
  txt='[q]'+txt+'[/q]\n';
}

function pasteQ() {
   if (txt!='') insertText(document.postform.p_text,txt);
}

Последний раз редактировалось sst, 08.01.2014 в 18:36.
Ответить с цитированием
  #2 (permalink)  
Старый 11.01.2014, 04:32
Аватар для Zuenf
Кандидат Javascript-наук
Отправить личное сообщение для Zuenf Посмотреть профиль Найти все сообщения от Zuenf
 
Регистрация: 27.01.2012
Сообщений: 134

Замени !txt в условиях функции copyQN() на txt=='', думаю поможет.
И document.getElementById в условиях наверное лишнее, убери его.

В итоге:
if (document.getElementById && txt=='' && document.getElementById(id).innerText)
if (document.getElementById && txt=='' && document.getElementById(id).textContent)

А если нет, то выложи html блока с постом.

Последний раз редактировалось Zuenf, 11.01.2014 в 04:51.
Ответить с цитированием
  #3 (permalink)  
Старый 12.01.2014, 15:54
sst sst вне форума
Новичок на форуме
Отправить личное сообщение для sst Посмотреть профиль Найти все сообщения от sst
 
Регистрация: 06.03.2013
Сообщений: 5

Огроменное спасибо! Всё заработало! Снимаю шляпу!
Ответить с цитированием
  #4 (permalink)  
Старый 14.01.2014, 20:02
sst sst вне форума
Новичок на форуме
Отправить личное сообщение для sst Посмотреть профиль Найти все сообщения от sst
 
Регистрация: 06.03.2013
Сообщений: 5

Сообщение от Zuenf Посмотреть сообщение
Замени !txt в условиях функции copyQN() на txt=='', думаю поможет.
И document.getElementById в условиях наверное лишнее, убери его.
Как продолжение доработки функции - есть ещё идея: допустим если целиком цитируется очень длинное сообщение, обрезать его после 300 символов и прибавлять многоточие.
Т. е. нужно написать условие: if ((txt.length) > 300) {txt=txt.substring(0,300)+'...';}
Как то так?

Последний раз редактировалось sst, 14.01.2014 в 20:29.
Ответить с цитированием
  #5 (permalink)  
Старый 14.01.2014, 22:48
Аватар для Zuenf
Кандидат Javascript-наук
Отправить личное сообщение для Zuenf Посмотреть профиль Найти все сообщения от Zuenf
 
Регистрация: 27.01.2012
Сообщений: 134

Да, txt.length в условии не обязательно в скобки брать и если после if() следует только одно выражение, то можно фигурные скобки не ставить.
if(txt.length > 300) txt = txt.substring(0,300) + '...';
Ответить с цитированием
  #6 (permalink)  
Старый 19.01.2014, 20:00
sst sst вне форума
Новичок на форуме
Отправить личное сообщение для sst Посмотреть профиль Найти все сообщения от sst
 
Регистрация: 06.03.2013
Сообщений: 5

Ещё раз благодарю. Написал условие как в ПХП и всё заработало!
Ответить с цитированием
  #7 (permalink)  
Старый 19.10.2018, 16:40
Новичок на форуме
Отправить личное сообщение для sqrt3000 Посмотреть профиль Найти все сообщения от sqrt3000
 
Регистрация: 19.10.2018
Сообщений: 1

А для чего в строке все заэкранировано?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
hide сообщений на форуме fAmOus Элементы интерфейса 2 07.09.2012 15:05
Раздел JAVA на форуме ~online~ Оффтопик 7 24.07.2012 06:34
Скажите как удалить аккаунт на этом форуме? Solovei95 Общие вопросы Javascript 12 17.11.2011 10:49
Регистрация на форуме alex_89 Events/DOM/Window 3 10.05.2011 16:44
Ввести тестирование при регистрации в форуме vladlen Сайт Javascript.ru 10 12.11.2010 18:37