Заменить все (.) Периоды в абзаце - PullRequest
3 голосов
/ 24 декабря 2009

Я пытаюсь заменить все периоды символом степени. Использование каждого метода заменяет только первый период внутри тега абзаца, но не все из них. Я также пытаюсь сделать так, чтобы точки внутри тегов привязки игнорировались и не заменялись, чтобы мой код не нарушал ссылки. Кто-нибудь может помочь?

$('div.post').each(function(){
    var $h = $(this);
    $h.html( $h.html().replace( '.', '<span class="period">&deg;<\/span>' ) );
});

Edit: Я должен был упомянуть, я хочу сохранить класс 'period', что делает его сложным.

Ответы [ 2 ]

1 голос
/ 24 декабря 2009
var span = $('<span class="period">°</span>').get(0);

$('p, p *').each(function (index,element) {
    $.each(element.childNodes, function (index,node) {
        if (node.nodeType == 3) {
            $.each(node.nodeValue.split('.'), function (index,fragment) {
                if ( index > 0 ) {
                    element.insertBefore(span.cloneNode(true),node);
                }
                element.insertBefore(document.createTextNode(fragment),node);
            });
            element.removeChild(node);
        }
    });
});

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

1 голос
/ 24 декабря 2009

Регулярное выражение с флагом g (глобальное) должно работать, чтобы заменить их всех:

$h.html( $h.html().replace(/\./g, '<span class="period">&deg;<\/span>' ) );

Несоответствие периодов в тегах привязки является значительно более сложной проблемой, поскольку регулярные выражения не имеют смысла иерархического контекста в документе HTML. Наилучший подход, который я мог бы придумать, - это просмотреть все подпункты внутри элемента, на HTML которого вы нацеливаете, и заменить их, пропуская их, если это якорный элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...