Как выделить фрагменты текста в качестве пользовательских типов? - PullRequest
2 голосов
/ 01 ноября 2011

У меня есть текстовое поле страницы, которое пользователь может вводить. По мере того, как пользователь печатает, я хочу выделять фрагменты текста. Проще говоря, я сейчас пытаюсь выделить все гласные.

Первая часть кода от этот вопрос :

$('[contenteditable]').live('focus', function() {
    var $this = $(this);
    $this.data('before', $this.html());
    return $this;
}).live('blur keyup paste', function() {
    var $this = $(this);
    if ($this.data('before') !== $this.html()) {
        $this.data('before', $this.html());
        $this.trigger('change');
    }
    return $this;
});

Из которого я могу написать это :

var magicRegex = /[aeiou]/gi;

$('#message').change(function() {
    $(this).find('br').replaceWith('\n');
    var message = $(this).text();

    message = message.replace(magicRegex , '<mark>$&</mark>');

    message = message.replace(/\n/gi, '<br />');
    $(this).html(message);
}).change();

Этот код выделяет гласные как пользовательские. Однако при этом фокус на поле теряется при каждом обновлении подсветки, и пользователь должен щелкнуть снова, чтобы ввести другой символ.

Как я могу это исправить?

1 Ответ

0 голосов
/ 01 ноября 2011

Я уверен, что вы не сможете сделать это без создания имитационного поля.

Вы можете использовать HTML для генерации HTML-элемента, который выглядит как поле ввода. Затем, когда этот элемент имеет фокус, вы можете зафиксировать нажатия клавиш. Вы должны будете отслеживать специальные не символьные клавиши, такие как backspace, tab и т. Д., И обрабатывать их индивидуально. Все типы пользователей могут быть сохранены в реальном поле формы (или просто в переменной JavaScript, если вы выберете).

Поле имитации будет затем считывать фактические значения (сохраненные в поле формы или переменной JS) и отображать его (с помощью CSS, элементов DOM и т. Д.), Чтобы оно выглядело так, как будто выделены определенные символы (или что вы как с ними делать).

Я не знаю, как вы могли бы достичь того, что пытаетесь сделать.

Удачи.

...