UNPKG

vtils

Version:

一个面向业务的 JavaScript/TypeScript 实用程序库。

88 lines (75 loc) 3.31 kB
import _createForOfIteratorHelperLoose from "@babel/runtime/helpers/esm/createForOfIteratorHelperLoose"; // https://github.com/fregante/select-dom/blob/master/index.ts import { toArray, uniq } from 'lodash-uni'; // WARNING: Overloads have to repeated in that fashion because the actual function’s signature is discarded; Only the 2 overloads are brought into the .d.ts file. Tests pass because `tsd` reads from this file instead of `.d.ts` // ParentNode is inherited by Element, Document, DocumentFragment // Type predicate for TypeScript function isQueryable(object) { return typeof object.querySelectorAll === 'function'; } /** * @param selectors One or more CSS selectors separated by commas * @param [baseElement] The element to look inside of * @return The element found, if any */ function selectElement(selectors, baseElement) { var _querySelector; // Shortcut with specified-but-null baseElement if (arguments.length === 2 && !baseElement) { return; } return (_querySelector = (baseElement != null ? baseElement : document).querySelector(String(selectors))) != null ? _querySelector : undefined; } /** * @param selectors One or more CSS selectors separated by commas * @param [baseElement] The element to look inside of * @return The element found, if any */ function selectElementLast(selectors, baseElement) { // Shortcut with specified-but-null baseElement if (arguments.length === 2 && !baseElement) { return undefined; } // @ts-ignore var all = (baseElement != null ? baseElement : document).querySelectorAll(String(selectors)); return all[all.length - 1]; } /** * @param selectors One or more CSS selectors separated by commas * @param [baseElement] The element to look inside of * @return Whether it's been found */ function selectElementExists(selectors, baseElement) { // Shortcut with specified-but-null baseElement if (arguments.length === 2 && !baseElement) { return false; } return Boolean((baseElement != null ? baseElement : document).querySelector(String(selectors))); } /** * @param selectors One or more CSS selectors separated by commas * @param [baseElements] The element or list of elements to look inside of * @return An array of elements found */ function selectElementAll(selectors, baseElements) { // Shortcut with specified-but-null baseElements if (arguments.length === 2 && !baseElements) { return []; } // Can be: select.all('selectors') or select.all('selectors', singleElementOrDocument) if (!baseElements || isQueryable(baseElements)) { // @ts-ignore var elements = (baseElements != null ? baseElements : document).querySelectorAll(String(selectors)); return toArray(elements); } var queried = []; for (var _iterator = _createForOfIteratorHelperLoose(baseElements), _step; !(_step = _iterator()).done;) { var _baseElement = _step.value; for (var _iterator2 = _createForOfIteratorHelperLoose(toArray(_baseElement.querySelectorAll(String(selectors)))), _step2; !(_step2 = _iterator2()).done;) { var element = _step2.value; queried.push(element); } } return uniq(queried); } export { selectElement, selectElementLast, selectElementExists, selectElementAll };