let ready = false; $(function() { ready = true; }); var r$ = function(callback) { if (ready) { callback(); } else { $(function() { callback(); }); } } function observe(containerSelector, elementSelector, callback) { r$(() => { $(containerSelector + ' ' + elementSelector).each(function (_, e) { let me = $(e); callback(me); }); var onMutationsObserved = function(mutations) { mutations.forEach(function(mutation) { if (mutation.addedNodes.length) { var elements = $(mutation.addedNodes).find(elementSelector); for (var i = 0, len = elements.length; i < len; i++) { let me = elements[i]; me = $(me); callback(me); } } }); }; var target = $(containerSelector)[0]; var config = { childList: true, subtree: true }; var MutationObserver = window.MutationObserver; var observer = new MutationObserver(onMutationsObserved); observer.observe(target, config); }); }