Добавление надстрочных тегов <sup> вокруг всех знаков товарного знака и зарегистрированного товарного знака
Я пытаюсь добавить теги <sup></sup>
вокруг каждого & trade;, & reg;, & copy; на моей странице.
Я нашел этот вопрос: товарный знак регистрации суперскриптов CSS, который помог мне начать.
script работает в том смысле, что теги размещаются в соответствующих местах, но он добавляет два тега <sup></sup>
вокруг каждого, а не только один.
Вот мой JS, добавляющий теги:
jQuery("body").html(
jQuery("body").html().replace(/®/gi, '<sup>®</sup>').replace(/®/gi, '<sup>®</sup>').
replace(/™/gi, '<sup>™</sup>').
replace(/™/gi, '<sup>™</sup>').
replace(/©/gi, '<sup>©</sup>').
replace(/©/gi, '<sup>©</sup>')
);
Как я могу убедиться, что теги добавляются только один раз за символ? Возможно, что-то условное?
Ответы
Ответ 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(/®/gi, '<sup>®</sup>').replace(/®/gi, '<sup>® </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>™</sup>");
});
})(jQuery, Drupal);