Dodawanie znaczników indeksu górnego wokół wszystkich znaków towarowych i zarejestrowanych znaków towarowych

Staram się dodawać <sup></sup> tagi wokół każdego™,®, © na mojej stronie.

Znalazłem takie pytanie: CSS superscript registration trademark {[7] } które pomogło mi zacząć.

Skrypt działa w tym sensie, że znaczniki są umieszczane w odpowiednich miejscach, ale dodaje dwa znaczniki {1]} wokół każdego zamiast tylko jednego.

Oto moje JS dodawanie tagów:

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>')
);

Jak mogę upewnić się, że znaczniki są dodawane tylko raz na symbol? Jakiś warunkowy może?

Author: Community, 2013-10-14

3 answers

Zamiast przepisywać cały znacznik (i usuwać wszystkie powiązane zdarzenia), wybrałbym coś takiego:

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

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

 23
Author: VisioN,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-14 16:22:24

To mi pasuje.

$("p,h1,h2,h3,h4,li,a").each(function(){
    $(this).html($(this).html().replace(/&reg;/gi, '<sup>&reg;</sup>').replace(/®/gi, '<sup>&reg;   </sup>'));
});
 2
Author: David Feldt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-28 15:21:27

@VisioN 's answer didn' t work that well for me, choc zwrócona była we właściwym kierunku. Trochę to podkręciłem:

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>');
});

Ta metoda wykorzystuje hex , zamiast kodu znaków. Sprawdziłam zaklęcie na character-codes.com i wybrał hex postaci. Wartość to AE, więc tak dotarłem do mojego rozwiązania. Daj mi znać, czy to działa na Ciebie!

 2
Author: Timon de Groot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-09 10:14:20