2

次のコードがあります。

    $.fn.addTemplateSetup(function () {
        this.find('pre').each(function (i) {
            SyntaxHighlighter.highlight({}, this);
        });
    });

各要素を見つけて、それに対して SyntaxHighlighter を実行します。

蛍光ペンが実行される前に、テキストのクラスを持つ<pre>内部にあるそれぞれをに変更したい<div><pre class='brush: plain'>

最初の関数内でこれを行う必要がありますか? 別の this.find を使用する必要がありますか?

4

3 に答える 3

3

これを試して:

$.fn.addTemplateSetup(function () {
    $("pre", this).addClass("brush: plain");
    this.find('pre').each(function (i) {
        SyntaxHighlighter.highlight({}, this);
    });
});

または

$.fn.addTemplateSetup(function () {
    this.find('pre').each(function (i) {
        this.addClass("brush: plain");
        SyntaxHighlighter.highlight({}, this);
    });
});
于 2012-05-25T08:36:27.447 に答える
3
$.fn.addTemplateSetup(function () {
    this.find('pre').each(function () {
        this.addClass("brush: plain");
        SyntaxHighlighter.highlight({}, this);
    });
});
于 2012-05-25T08:37:17.210 に答える
0

$ を使用して選択するたびに、一連の要素が取得され、選択に対して実行する各操作がすべての要素に対して実行されます。そのため$("pre").addClass("myClass")、クラス 'myClass' がドキュメント内のすべての pre 要素に追加されます。さらに、操作は選択自体を返すので、次のような操作を連鎖させることができます。 $("pre").addClass("myClass").css("font-weight","bolder")これにより、クラスが追加され、CSS プロパティの font-weight が太字に設定されます。

これに対する例外は、値を返す場合です。たとえば、最初の入力要素の値のような$("input").val()ことをすると返されます

したがって、特定のケースでは、すべての事前要素を選択して、クラスとハイライトを追加する必要があります

$.fn.addTemplateSetup(function () {
        this.find('pre')
            .addClass("brush: plain")
            .each(function () {
               SyntaxHighlighter.highlight({}, this);
        });
});

ただし、クラスはインラインスタイリングを適用しようとしているように見えるため、その方法も含めました

$.fn.addTemplateSetup(function () {
        this.find('pre')
            .css('brush', 'plain')
            .each(function () {
               SyntaxHighlighter.highlight({}, this);
        });
});

それぞれの前に addClass/css を置いた理由は、addClass/css が適用された選択で each を呼び出すためです。each 関数内で addClass が使用されている場合、コレクション全体を 2 回反復するよりも遅いと予想される 1 つの要素の選択に対して each が呼び出されます。各要素への訪問回数はどちらの場合も同じであり、レビューでどちらにも反対します

于 2012-05-25T09:07:42.467 に答える