Ответ 1
Насколько я понимаю, вам нужно это:
$(this).find("pre").not('.prettyprint').each(function(){
$(this).addClass("prettyprint");
prettyPrint();
})
Я использую 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();
});
Есть ли какой-либо возможный способ достичь этого?
Насколько я понимаю, вам нужно это:
$(this).find("pre").not('.prettyprint').each(function(){
$(this).addClass("prettyprint");
prettyPrint();
})
Вы можете расширить метод .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);
Функция addClass
jQuery не имеет обратного вызова в аргументах.
Подробнее об этом читайте в документации.
Я думаю, что это сработает для вас:
// prettyprint class is added
$(this).find("pre").not('.prettyprint').addClass("prettyprint");
// after prettyprint class is added, prettyPrint function is called
prettyPrint();