Skip to content

Instantly share code, notes, and snippets.

@dman777
Forked from ebidel/findall_elements_deep.js
Created April 16, 2018 22:03
Show Gist options
  • Save dman777/a4bf4f51334770efdc67c1c29139d6d4 to your computer and use it in GitHub Desktop.
Save dman777/a4bf4f51334770efdc67c1c29139d6d4 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