如何将回调函数添加到jQuery的addClass方法?

Mat*_*hai 18 jquery addclass

我正在使用Google和Markdown的Prettify,我想每次pre在markdown中添加一个代码textarea来再次调用该prettyPrint()函数.

这是我的实际代码:

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

但是我想要这样的东西:

$(this).find("pre").not('.prettyprint').addClass("prettyprint",function(){
  prettyPrint();
});
Run Code Online (Sandbox Code Playgroud)

有没有可能的方法来实现这一目标?

A. *_*lff 17

你可以扩展.addClass()jquery的方法让它接受一个回调函数:

;(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);
Run Code Online (Sandbox Code Playgroud)

然后像往常一样使用它:

 $('pre:not(.prettyprint)').addClass('prettyprint',prettyPrint);
Run Code Online (Sandbox Code Playgroud)

  • 这很好,除了它在执行回调后添加`.prettyprint`.核心事件完成后应该触发回调(例如使用[fadeIn()](http://api.jquery.com/fadeIn/)). (4认同)
  • @jacob更新它以推送事件队列中的回调并设置相关的回调上下文,thx! (2认同)

Vik*_* S. 9

据我了解,你需要这个:

$(this).find("pre").not('.prettyprint').each(function(){
   $(this).addClass("prettyprint");
   prettyPrint();
})
Run Code Online (Sandbox Code Playgroud)