Skip to content

Instantly share code, notes, and snippets.

@Nashorn
Forked from ebidel/findall_elements_deep.js
Created October 30, 2020 09:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Nashorn/05cd881a12440803327d10833856db1f to your computer and use it in GitHub Desktop.
Save Nashorn/05cd881a12440803327d10833856db1f to your computer and use it in GitHub Desktop.
Finds all elements on the page, including those within shadow dom.
/**
* @author ebidel@ (Eric Bidelman)
* License Apache-2.0
*/
/**
* Finds all elements on the page, inclusive of those within shadow roots.
* @param {string=} selector Simple selector to filter the elements by. e.g. 'a', 'div.main'
* @return {!Array<string>} List of anchor hrefs.
*/
function collectAllElementsDeep(selector = null) {
const allElements = [];
const findAllElements = function(nodes) {
for (let i = 0, el; el = nodes[i]; ++i) {
allElements.push(el);
// If the element has a shadow root, dig deeper.
if (el.shadowRoot) {
findAllElements(el.shadowRoot.querySelectorAll('*'));
}
}
};
findAllElements(document.querySelectorAll('*'));
return selector ? allElements.filter(el => el.matches(selector)) : allElements;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment