UNPKG

vtils

Version:

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

94 lines (81 loc) 3.64 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; exports.__esModule = true; exports.selectElement = selectElement; exports.selectElementAll = selectElementAll; exports.selectElementExists = selectElementExists; exports.selectElementLast = selectElementLast; var _createForOfIteratorHelperLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelperLoose")); var _lodashUni = require("lodash-uni"); // https://github.com/fregante/select-dom/blob/master/index.ts // 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 (0, _lodashUni.toArray)(elements); } var queried = []; for (var _iterator = (0, _createForOfIteratorHelperLoose2.default)(baseElements), _step; !(_step = _iterator()).done;) { var _baseElement = _step.value; for (var _iterator2 = (0, _createForOfIteratorHelperLoose2.default)((0, _lodashUni.toArray)(_baseElement.querySelectorAll(String(selectors)))), _step2; !(_step2 = _iterator2()).done;) { var element = _step2.value; queried.push(element); } } return (0, _lodashUni.uniq)(queried); }