Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.11.2008, 01:07
Новичок на форуме
Отправить личное сообщение для brain Посмотреть профиль Найти все сообщения от brain
 
Регистрация: 28.11.2008
Сообщений: 7

смайлы для чата, замена текста
например есть строка:

привет #111# человек #011# как дела? #098#

---------------
как вы уже наверное догадались, #111# #011# #098# - это смайлы,

сами картинки храняться на сервере и имеют имена:
111.gif
011.gif
098.gif

---------------
вопрос:
каким образом используя JavaScript эти лексемы можно заменить на HTML код: <img src = 'путь/файл'>
?
?


начал размышлять в сторону регулярных выражений:

// патерн для смайлов
ptn_s = /\#[0-9]{1,4}\#/g;

// в этом массиве мы храним все смайлы из нашей строки
smilesArray = data.match(ptn_s);

подскажите пожайлуста, как можно закончить мысль с минимальными затратами ресурсов пользователя..
Ответить с цитированием
  #2 (permalink)  
Старый 28.11.2008, 01:47
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

А зачем здесь JavaScript, заменять коды смайлов на <img> нужно на стороне сервера перед выдачей страницы клиенту. И такие коды для смайлов — бредовая идея, используйте привычные текстовые смайлы.
Ответить с цитированием
  #3 (permalink)  
Старый 28.11.2008, 09:53
Новичок на форуме
Отправить личное сообщение для brain Посмотреть профиль Найти все сообщения от brain
 
Регистрация: 28.11.2008
Сообщений: 7

А зачем здесь JavaScript?
заменять коды смайлов нужно на стороне сервера перед выдачей страницы клиенту
------------------------
все дело в трафике, если с сервера будут приходить сообщения с сылкой, трафика рано или поздно уйдет больше чем этот кусок кода на стороне клиента...

еще положительный момент,
перед тем как выводить графику в окошко, все смайлы прокэшены и находяться в массиве JS


PS: простые текстовые смайлы здесь не подходят
Ответить с цитированием
  #4 (permalink)  
Старый 28.11.2008, 09:59
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

str = '#123#';
str.replace('#', '').replace('#', '.gif');


Как у Вас сайт грузится? (ajax или просто так)
В какой момент Вы хотите смайлы менять?

Последний раз редактировалось Snipe, 28.11.2008 в 10:01.
Ответить с цитированием
  #5 (permalink)  
Старый 28.11.2008, 10:04
Новичок на форуме
Отправить личное сообщение для brain Посмотреть профиль Найти все сообщения от brain
 
Регистрация: 28.11.2008
Сообщений: 7

спасибо, мысль понятна..
почемуто думал что str_replace работает только с регулярными выражениями
оказывается еще и часть строки можно вставить.
Ответить с цитированием
  #6 (permalink)  
Старый 28.11.2008, 19:34
Новичок на форуме
Отправить личное сообщение для brain Посмотреть профиль Найти все сообщения от brain
 
Регистрация: 28.11.2008
Сообщений: 7

Сообщение от Snipe Посмотреть сообщение
Как у Вас сайт грузится?
сообщения приходят аджаксом, после чего обрабатываються JavaScript и добавляются во фрейм сообщений методом InnerHTML

Сообщение от Snipe Посмотреть сообщение
В какой момент Вы хотите смайлы менять?
Смайлы меняем во время обработки сообщений JavaScriptom



получилось что то вроде:


ptn_s = /\#[0-9]{1,4}\#/g;

smilesArray = data.match(ptn_s);

if (smilesArray != null)
{


for (var n=0; n<smilesArray.length; n++)
{
data = data.replace(smilesArray[n], '<img src = \'' + smilesImgArray[smilesArray[n]].src + '\' border=0>');
}
}

и казалось бы работает - оно вери гуд!, и ошибок вроде не выдает, но кодеры - народ пытливый

дело в том что в массиве smilesArray могут быть повторяющиеся элементы,
из за этого replace может повториться ненужных N раз,
в зависимости от количества этих дубликатов.


не подскажете как удалить повторяющиеся элементы из массива средствами JS?

Последний раз редактировалось brain, 28.11.2008 в 19:41.
Ответить с цитированием
  #7 (permalink)  
Старый 28.11.2008, 19:52
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Если я правильно понимаю, то в цикле Вы в replace уже подставляете строку, а не регулярное выражение, а раз это не регулярка, значит замена происходит только с одним элементом - с первым, из всех одинаковых.

Т.е., если я правильно разобрался, у Вас все выполняется ровно столько раз, сколько надо.

Убрал, ерунду которую написал %)

Последний раз редактировалось Snipe, 28.11.2008 в 20:13.
Ответить с цитированием
  #8 (permalink)  
Старый 28.11.2008, 19:57
Новичок на форуме
Отправить личное сообщение для brain Посмотреть профиль Найти все сообщения от brain
 
Регистрация: 28.11.2008
Сообщений: 7

понял,
Snipe спасибо что обьяснил, теперь буду спокоен)
Ответить с цитированием
  #9 (permalink)  
Старый 28.11.2008, 20:28
Новичок на форуме
Отправить личное сообщение для brain Посмотреть профиль Найти все сообщения от brain
 
Регистрация: 28.11.2008
Сообщений: 7

прочитать дополнение успел,
во он оно че!

логику понял, но почемуто RegExp.$1 у меня ничего не выводит(
Ответить с цитированием
  #10 (permalink)  
Старый 28.11.2008, 20:35
Новичок на форуме
Отправить личное сообщение для brain Посмотреть профиль Найти все сообщения от brain
 
Регистрация: 28.11.2008
Сообщений: 7

Сообщение от Snipe Посмотреть сообщение
Убрал, ерунду которую написал %)
а я уже обрадовался
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод и замена текста Classi Общие вопросы Javascript 6 25.12.2008 19:18
Замена выделенного текста alexKniaz Общие вопросы Javascript 0 27.10.2008 22:25
Форма для ввода текста с расширенными функциями 0x22b Элементы интерфейса 0 01.09.2008 09:38
Поиск текста и замена krestiyaninov Общие вопросы Javascript 1 07.05.2008 12:30