/** | |
* Given a CSS selector, returns the first matching node, if any. | |
* @param {string} css the CSS selector to query | |
* @param {Document | DocumentFragment | Element} [root] the optional parent node to query | |
* @returns {Element?} the found element, if any | |
*/ | |
const $ = (css, root = document) => root.querySelector(css); | |
/** | |
* Given a CSS selector, returns a list of all matching nodes. | |
* @param {string} css the CSS selector to query | |
* @param {Document | DocumentFragment | Element} [root] the optional parent node to query | |
* @returns {Element[]} a list of found nodes | |
*/ | |
const $$ = (css, root = document) => [...root.querySelectorAll(css)]; | |
/** | |
* Given a XPath selector, returns a list of all matching nodes. | |
* @param {string} path the XPath selector to evaluate | |
* @param {Document | DocumentFragment | Element} [root] the optional parent node to query | |
* @returns {Node[]} a list of found nodes (elements, attributes, text, comments) | |
*/ | |
const $x = (path, root = document) => { | |
const expression = (new XPathEvaluator).createExpression(path); | |
const xpath = expression.evaluate(root, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE); | |
const result = []; | |
for (let i = 0, {snapshotLength} = xpath; i < snapshotLength; i++) | |
result.push(xpath.snapshotItem(i)); | |
return result; | |
}; | |
export { $, $$, $x }; | |