Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.07.2013, 17:04
Новичок на форуме
Отправить личное сообщение для igor_ch Посмотреть профиль Найти все сообщения от igor_ch
 
Регистрация: 23.12.2010
Сообщений: 9

Подсветка отдельных символов
Доброе время суток.
нужна помощь в следующем вопросе.
Мне нужно сделать, что-бы при вводе текста, определенные символы окрашивались в определенные цвета (например латинские символы в синий цвет).
Попытался реализовать через:
Код:
<p contenteditable="true" id="inp_text"></p>
но, к сожалению,
Код:
document.execCommand("foreColor",false,"#00F")
требует предварительно вручную выделить символ, что мне не подходит, поскольку символы должны окрашиваться "на лету" при вводе.

Подскажите, может есть другие способы реализовать данную задумку.
Буду очень благодарен за подсказку.
Ответить с цитированием
  #2 (permalink)  
Старый 01.07.2013, 17:48
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Находи нужный символ и оборачивай его в <span style="bla bla">..</span>
Если объем текста небольшой - тормозов возникнуть не должно.
Ответить с цитированием
  #3 (permalink)  
Старый 01.07.2013, 18:05
Новичок на форуме
Отправить личное сообщение для igor_ch Посмотреть профиль Найти все сообщения от igor_ch
 
Регистрация: 23.12.2010
Сообщений: 9

Сообщение от danik.js Посмотреть сообщение
Находи нужный символ и оборачивай его в <span style="bla bla">..</span>
Проблема в том, что тогда теряется позиция курсора в тексте (в случае, если пользователь вводит символ в средине текста).
Ответить с цитированием
  #4 (permalink)  
Старый 01.07.2013, 18:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от igor_ch
Проблема в том, что тогда теряется позиция курсора в тексте (в случае, если пользователь вводит символ в средине текста).
Значит нужно перед заменой запоминать позицию курсора и восстанавливать после замены. Твиттер же как-то решил эту проблему )
Ответить с цитированием
  #5 (permalink)  
Старый 01.07.2013, 19:00
Новичок на форуме
Отправить личное сообщение для igor_ch Посмотреть профиль Найти все сообщения от igor_ch
 
Регистрация: 23.12.2010
Сообщений: 9

Как запоминать позицию курсора я в инете нашел, а вот как восстанавливать после замены - ничего не нашел.
Все рабочие примеры, что мне попадались только для <input> или <textarea>

Цитата:
Твиттер же как-то решил эту проблему
к сожалению решение твитера мне пока не по зубах. я в javascrip еще новичок. Жаль, что они это в свой бутстрап не добавили. было бы проще
Ответить с цитированием
  #6 (permalink)  
Старый 01.07.2013, 19:21
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от igor_ch
Жаль, что они это в свой бутстрап не добавили
Добавлять в бутстрап хрень, которая нужна одному из миллиона?
Ответить с цитированием
  #7 (permalink)  
Старый 01.07.2013, 19:25
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от igor_ch
Как запоминать позицию курсора я в инете нашел, а вот как восстанавливать после замены - ничего не нашел.
Изначально, перед вставкой, вставляете за текущей позицией курсора тег <a id="thispostion"></a>, после замены, - ищите позицию тега, а тег -удаляете

Последний раз редактировалось Deff, 01.07.2013 в 20:01.
Ответить с цитированием
  #8 (permalink)  
Старый 02.07.2013, 13:26
Новичок на форуме
Отправить личное сообщение для igor_ch Посмотреть профиль Найти все сообщения от igor_ch
 
Регистрация: 23.12.2010
Сообщений: 9

Вот что у меня в результате получилось:
document.getElementById('inp_symbols').onkeypress = function (e) {
            var e = e || window.event,
                target = e.target || e.srcElement;
                isIE = document.all;
                code = isIE ? e.keyCode : e.which,
                data = {};

            if (target.nodeName != 'INPUT' && target.nodeName != 'TEXTAREA') {
                if (code == 27) {
                    // restore state
                    document.execCommand('undo');
                    target.blur();
                    return true;
                } else{
                    if (code == 13) {
                        // save
                        data[target.getAttribute('data-name')] = target.innerHTML;
                        target.blur();
                        e.preventDefault();
                        return true;
                    }
                }

                if (code<32 || e.ctrlKey || e.altKey) return true;

                var color = 'red-color',
                    sym = String.fromCharCode(code);
                if(sym.search(/[a-zA-Z]/) !== -1){
                    color = 'blue_symbol';
                }else{
                    if(sym.search(/[0-9]/) !== -1){
                        color = 'gray_symbol';
                    }
                }

                //вставка элемента в текущую точку ввода
                if (isIE) {//IE
                    var rng = document.selection.createRange();
                    rng.pasteHTML('<span class="'+color+'">'+sym+'</span>');
                }else{//other
                    document.execCommand('insertHTML', false, '<span class="'+color+'">'+sym+'</span>');
                }

                return false;
            }
        };

где document.getElementById('inp_symbols') это
<p id="inp_symbols" contenteditable="true" data-name="title" spellcheck="false"></p>


ну и CSS:
<style type="text/css">
.blue_symbol{
        color:blue;
    }
    .gray_symbol{
        color:gray;
    }
    .red-color{
        color:red;
    }
</style>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярное выражение (только цифры и 10 символов) allanmiln Javascript под браузер 5 15.03.2013 14:10
количество символов ivanweb jQuery 14 13.09.2012 16:26
Ограничить количество символов в textarea iNfantry jQuery 2 14.05.2012 11:35
Подсветка активной ссылки r12 Events/DOM/Window 7 24.10.2011 18:40
Редактор TinyMCE не отправляет много русских символов cobria2 Общие вопросы Javascript 0 09.05.2011 00:46