Как добавить функцию обратного вызова в метод addClass для jQuery? - программирование
Подтвердить что ты не робот

Как добавить функцию обратного вызова в метод addClass для jQuery?

Я использую Prettify от Google и Markdown, и каждый раз, когда я нахожу код pre, добавленный в markdown 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();
});

Есть ли какой-либо возможный способ достичь этого?

4b9b3361

Ответ 1

Насколько я понимаю, вам нужно это:

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

Ответ 2

Вы можете расширить метод .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);

Затем используйте его как обычно:

 $('pre:not(.prettyprint)').addClass('prettyprint',prettyPrint);

Ответ 3

Функция addClass jQuery не имеет обратного вызова в аргументах.

Подробнее об этом читайте в документации.

Я думаю, что это сработает для вас:

// prettyprint class is added
$(this).find("pre").not('.prettyprint').addClass("prettyprint");
// after prettyprint class is added, prettyPrint function is called
prettyPrint();