Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.02.2015, 21:32
Аватар для Momon
Аспирант
Отправить личное сообщение для Momon Посмотреть профиль Найти все сообщения от Momon
 
Регистрация: 02.12.2014
Сообщений: 72

Выделение текста при наборе пользователем
Пользователь набирает текст input и в строке str происходит его выделение, например bold, при помощи обрамления тегами <b></b>. Казалось бы простой инструмент, но как реализовать, если учесть что:

1. Пользователь может вводить слова невпопад.
2. Между словами могут быть разные символы .,;- и т.д.
3. Последнее слово может являться начальной частью слова.
var str = "слово1, -слово2; слово3.";
var input = "слово1 слов";
// У меня такая идея:
str = str.replace(/[\.\,\;\-]/g, " "); // удаляем символы
str = str.replace(/\s+/g, " ").replace(/^\s|\s$/g, ""); // сжимаем пробелы
var arr = str.split(" "); // разбиваем строку по пробелам
for (var i = 0; i < arr.length; i++) {
str = str.replace(new RegExp("(\\s|^|-|>|\\.|,|;)(" + arr[i] + ")(?!\\S*</b>)"), "$1<b>$2</b>");
}
Но символы то остаются невыделенными и я придумал велосипед (хотя я наверно уже на нём еду).
Значит, при помощи match или ещё как находить все символы между словами:

(какие то символы)слово1(какие то символы)слово2(какие то символы)слово3(какие то символы)

Потом каждую такую группу разбивать split на отдельные символы, создавать ещё один цикл (какой там по счету) и проводить последовательное сравнение символов групп из str и input, и обрамлять тегами совпадающие... во

Последний раз редактировалось Momon, 09.02.2015 в 21:50.
Ответить с цитированием
  #2 (permalink)  
Старый 09.02.2015, 21:53
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

В input список слов, разделенных пробелом? Их надо подсветить?
Почему не делать просто replace(new RegExp(words[i]), '<b>$1</b>') - грубо говоря?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 09.02.2015, 22:38
Аватар для Momon
Аспирант
Отправить личное сообщение для Momon Посмотреть профиль Найти все сообщения от Momon
 
Регистрация: 02.12.2014
Сообщений: 72

danik.js,
Такой replace будет два раза выделять первое из повторяющихся слов, а ещё будет выделять куски из середины слова.
Ладно, не вникайте, я просто спросил может есть уже готовые решение какое нибудь? Задача ведь вроде бы простая. Или у меня подход неправильный?

Последний раз редактировалось Momon, 09.02.2015 в 22:45.
Ответить с цитированием
  #4 (permalink)  
Старый 09.02.2015, 22:45
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Momon
а ещё будет выделять куски из середины слова
\b - не?
Сообщение от Momon
Такой replace будет два раза выделять первое из повторяющихся слов
Уверен?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 09.02.2015, 22:47
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от danik.js
Уверен?
Или ты имеешь ввиду что юзер введет одно слово дважды? Тогда да, это проблема. Тогда нужно сначала уникализировать массив слов.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 09.02.2015, 22:55
Аватар для Momon
Аспирант
Отправить личное сообщение для Momon Посмотреть профиль Найти все сообщения от Momon
 
Регистрация: 02.12.2014
Сообщений: 72

danik.js,
Зачем его уникализировать? Например 2 одинковых слова в str и два слова набрал пользователь в input. Надо оба выделить. Я использую упреждение: (?!\\S*</b>), т.е. если уже обрамили тегами проходим мимо. Но не в этом суть, там же ещё символы выделять надо, строить все эти циклы и тд. Очень громоздко всё получается. Это вообще правильный подход?

Последний раз редактировалось Momon, 09.02.2015 в 22:58.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение при клике на элемент haacki jQuery 2 16.03.2014 14:56
движение текста при нажатии кнопки jquery imediasun1 Элементы интерфейса 10 31.01.2014 10:55
Скрытие\показывание поля при вводе текста egor1708 Элементы интерфейса 2 30.11.2012 19:02
Подскажите как убрать часть текста при нажатии на кномпу или гиперссылку. potkin Общие вопросы Javascript 6 10.10.2008 07:55
Firefox: перехватить соббытие при перетаскивании текста no_alex Общие вопросы Javascript 9 21.08.2008 18:02