19

私は Google と Markdown の Prettify を使用しています。マークダウンにpre追加されたコードを見つけるたびにtextarea、関数を再度呼び出す必要がありprettyPrint()ます。

これは私の実際のコードです:

if($('#wmd-preview').length > 0) {
  $('#wmd-preview').on('DOMNodeInserted DOMNodeRemoved',function(){
    $(this).find("pre").not('.prettyprint').addClass("prettyprint");
  });
}

しかし、私は次のようなものが欲しい:

$(this).find("pre").not('.prettyprint').addClass("prettyprint",function(){
  prettyPrint();
});

これを達成する方法はありますか?

4

3 に答える 3

19

jquery のメソッドを拡張.addClass()して、コールバック関数を受け入れることができます。

;(function ($) {
    var oAddClass = $.fn.addClass;
    $.fn.addClass = function () {
        for (var i in arguments) {
            var arg = arguments[i];
            if ( !! (arg && arg.constructor && arg.call && arg.apply)) {
                setTimeout(arg.bind(this));
                delete arguments[i];
            }
        }
        return oAddClass.apply(this, arguments);
    }

})(jQuery);

次に、通常どおり使用します。

 $('pre:not(.prettyprint)').addClass('prettyprint',prettyPrint);
于 2013-01-28T18:40:13.330 に答える
9

私が理解している限り、これが必要です。

$(this).find("pre").not('.prettyprint').each(function(){
   $(this).addClass("prettyprint");
   prettyPrint();
})
于 2013-01-28T17:58:42.267 に答える
2

jQuery関数には、addClass引数にコールバックがありません。

これについて詳しくは、ドキュメントをご覧ください。

私はこれがあなたのために働くと思います:

// prettyprint class is added
$(this).find("pre").not('.prettyprint').addClass("prettyprint");
// after prettyprint class is added, prettyPrint function is called
prettyPrint();
于 2013-01-28T17:49:54.713 に答える