Просто добавьте еще один уровень абстракции над вызовом jQuery ajax. Этот слой будет выполнять вызов ajax и сканировать ваш результат, добавляя при необходимости лайтбокс. Вот что я имею в виду:
1.
function lightBoxAjaxRequest(requestObj) {
if (requestObj.success) {
var requestObjCopy = $.clone(requestObj); // clone request object
requestObjCopy.success = function add$lightbox$to$response(html) {
// Add "html" to the page...
// Call lightbox code here, on newly added HTML
requestObj.success(html); // Trigger original success handler
};
$.ajax(requestObjCopy);
}
else {
$.ajax(requestObj);
}
};
Может быть, что-то подобное? Я не знаю, насколько хорошо это будет работать на практике. Кажется, вы хотите всегда запускать какую-то функцию после того, как что-то было добавлено в DOM.
1010 * В качестве альтернативы *
Вы также можете создать оболочку вокруг innerHTML
, чтобы выполнить работу за вас:
2.
function addHtmlToDomWithLightbox(domElement, html) {
if (typeof domElement === "string") {
domElement = $("#" + domElement);
}
domElement.html(html);
// Add lightbox here
domElement.find("a").fancyBox({});
};
Вы бы вызывали addHtmlToDomWithLightbox
во всех ваших функциях успеха (вместо добавления HTML через метод jQuery html
). Обратите внимание, что имя метода длинное и многословное, вы можете изменить его и разместить метод где угодно. Я просто сделал это многословным для иллюстративных целей.