-
-
Save rajivmehtaflex/3d1d96f27df600bfeab05c6a4406b84e to your computer and use it in GitHub Desktop.
waitForElement.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function waitForElement(selector) { | |
return new Promise(function(resolve, reject) { | |
var element = document.querySelector(selector); | |
if(element) { | |
resolve(element); | |
return; | |
} | |
var observer = new MutationObserver(function(mutations) { | |
mutations.forEach(function(mutation) { | |
var nodes = Array.from(mutation.addedNodes); | |
for(var node of nodes) { | |
if(node.matches && node.matches(selector)) { | |
observer.disconnect(); | |
resolve(node); | |
return; | |
} | |
}; | |
}); | |
}); | |
observer.observe(document.documentElement, { childList: true, subtree: true }); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
It is pretty simple to use this simple API.
waitForElement("#test").then(function(element) {
console.log("Element Added", element);
});
Now combining in the monitorEvents function from my previous post, I can now set a breakpoint early in the lifecycle of a page (because scripts in the head block) and set up a waitForElement call that can now start logging all the events that are firing on that element.
waitForElement("#test").then(function(element) {
monitorEvents(element);
});