Подтвердить что ты не робот

Добавление надстрочных тегов <sup> вокруг всех знаков товарного знака и зарегистрированного товарного знака

Я пытаюсь добавить теги <sup></sup> вокруг каждого & trade;, & reg;, & copy; на моей странице.

Я нашел этот вопрос: товарный знак регистрации суперскриптов CSS, который помог мне начать.

script работает в том смысле, что теги размещаются в соответствующих местах, но он добавляет два тега <sup></sup> вокруг каждого, а не только один.

Вот мой JS, добавляющий теги:

jQuery("body").html(
    jQuery("body").html().replace(/&reg;/gi, '<sup>&reg;</sup>').replace(/®/gi, '<sup>&reg;</sup>').
        replace(/&trade;/gi, '<sup>&trade;</sup>').
        replace(/™/gi, '<sup>&trade;</sup>').
        replace(/&copy;/gi, '<sup>&copy;</sup>').
        replace(/©/gi, '<sup>&copy;</sup>')
);

Как я могу убедиться, что теги добавляются только один раз за символ? Возможно, что-то условное?

4b9b3361

Ответ 1

Вместо того, чтобы переписывать всю разметку (и удалять все связанные события), я бы пошел на что-то вроде этого:

$('body :not(script)').contents().filter(function() {
    return this.nodeType === 3;
}).replaceWith(function() {
    return this.nodeValue.replace(/[™®©]/g, '<sup>$&</sup>');
});

DEMO: http://jsfiddle.net/QTfxC/

Ответ 2

Ответ на

@VisioN не помог мне, хотя он оказался в правильном направлении. Я немного изменил его:

var regexp = /[\xAE]/;
$('body :not(script,sup)').contents().filter(function() {
    return this.nodeType === 3 && (regexp.test(this.nodeValue));
}).replaceWith(function() {
    return this.nodeValue.replace(regexp, '<sup>$&</sup>');
});

Этот метод использует символ hex вместо использования символьного кода. Я посмотрел гексагон на character-codes.com и выбрал шестнадцатеричный символ символа. Значение AE так, как я добрался до своего решения. Дайте мне знать, работает ли это для вас!

Ответ 3

Это работает для меня.

$("p,h1,h2,h3,h4,li,a").each(function(){
    $(this).html($(this).html().replace(/&reg;/gi, '<sup>&reg;</sup>').replace(/®/gi, '<sup>&reg;   </sup>'));
});

Ответ 4

Это сработало для меня на моем сайте Drupal 8:

(function ($, Drupal) {
var regexp = /[\u2122]/;
$('body :not(script,sup)').contents().filter(function() {
    return this.nodeType === 3 && (regexp.test(this.nodeValue));
}).replaceWith(function() {
    return this.nodeValue.replace("\u2122", "<sup>&trade;</sup>");
});
})(jQuery, Drupal);