Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Цитирование на форуме. (https://javascript.ru/forum/events/44143-citirovanie-na-forume.html)

sst 08.01.2014 18:33

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

Строка с ссылкой "Цитировать":
<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);
}

Zuenf 11.01.2014 04:32

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

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

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

sst 12.01.2014 15:54

Огроменное спасибо! Всё заработало! Снимаю шляпу! :thanks:

sst 14.01.2014 20:02

Цитата:

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

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

Zuenf 14.01.2014 22:48

Да, txt.length в условии не обязательно в скобки брать и если после if() следует только одно выражение, то можно фигурные скобки не ставить.
if(txt.length > 300) txt = txt.substring(0,300) + '...';

sst 19.01.2014 20:00

Ещё раз благодарю. Написал условие как в ПХП и всё заработало!

sqrt3000 19.10.2018 16:40

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


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