Что такое Javascript Regexp для поиска атрибутов в тегах <span>? - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть <div contenteditable="true>, который я пытаюсь использовать для получения текста от пользователей. Я бы использовал простой <textarea>, но мне нужны разрывы строк и, в конечном итоге, списки, таблицы и т. Д. Я пытаюсь создать что-то наполовину многофункциональный текстовый редактор, но не полноценный. Я не хочу использовать текстовый редактор.

Я пытаюсь удалить атрибуты тегов <span> из текста, введенного в <div contenteditable="true>. Есть ли способ сделать это с помощью регулярных выражений? У меня были трудности с созданием регулярного выражения, потому что я не могу понять, как сделать так, чтобы строка начиналась с <span и заканчивалась >, и любое число символов могло быть между. Есть ли способ объединить это в одном регулярном выражении? Я придумал /^<span >$/, но это не работает, потому что между двумя строками нет разделения. Будет ли что-то вроде этой работы: /^[<span][>]$/g?

Ответы [ 4 ]

1 голос
/ 19 апреля 2011

Я сделал рабочую демонстрацию на http://jsfiddle.net/b3DSQ/

$('#editor span').each(function(i, el) {
    var attrs = el.attributes;
    $.each(attrs, function(i, a) {
        $(el).removeAttr(a.name);
    });
});

[Я изменил более раннюю версию, которая копировала содержимое в память, редактировала, а затем заменяла - не поняла, что материал, введенный в div, автоматически действует в DOM].

1 голос
/ 19 апреля 2011

Разбор HTML и последующее удаление атрибутов. Если вы делаете это в браузере, у вас есть высококачественный парсер HTML прямо в вашем распоряжении (или у вас IE) , так что используйте его!

1 голос
/ 19 апреля 2011

Используйте для этого функции DOM.Вот некоторый код, использующий jQuery, чтобы сделать его более простым и приятным для чтения:

$('#your-div span').each(function() {
    var elem = this, $elem = $(this);
    $.each(elem.attributes, function(i, attr) {
        if(attr) {
            $elem.removeAttr(attr.name);
        }
    });
});

Демонстрация: http://jsfiddle.net/ThiefMaster/qfsAb/

Однако в вашем случае вы можете удалить атрибуты не только из промежутков, ноиз всех элементов, кроме атрибута, например, align или href.

Итак, вот несколько JS для этого: http://jsfiddle.net/ThiefMaster/qfsAb/1/

$('#your-div').children().each(function() {
    var elem = this, $elem = $(this);
    $.each(elem.attributes, function(i, attr) {
        if(attr && attr.name != 'href' && attr.name != 'align') {
            $elem.removeAttr(attr.name);
        }
    });
});
0 голосов
/ 19 апреля 2011

Попробуйте это:

your_string.replace(/<span[^>]*>/g, '<span>');

Это сломается, однако, если пользователь пишет что-то вроде <span title="Go > there">

...