11

<sup></sup>ページ内のすべての ™、®、© の周りにタグを追加しようとしています。

私はこの質問を見つけました:私が始めるのを助けたCSS上付き登録商標。

このスクリプトは、タグが適切な場所に配置されているという意味では機能しますが、タグを<sup></sup>1 つではなく 2 つ追加しています。

タグを追加する私の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>')
);

タグがシンボルごとに 1 回だけ追加されるようにするにはどうすればよいですか? 多分ある種の条件付き?

4

4 に答える 4

29

マークアップ全体を書き直す (そしてすべてのバインドされたイベントを削除する) 代わりに、次のようにします。

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

デモ: http://jsfiddle.net/QTfxC/

于 2013-10-14T16:22:24.757 に答える
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>'));
});
于 2014-10-28T15:18:47.167 に答える
3

@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で16 進数を調べて、® 文字の 16 進数を選びました。価値があるAEので、それが私の解決策にたどり着いた方法です。これがあなたのために働いたかどうか教えてください!

于 2015-10-09T10:14:20.830 に答える