UNPKG

@mdui/jq

Version:

拥有和 jQuery 相似 API 的轻量级 JavaScript 工具库

41 lines (40 loc) 1.52 kB
import { $ } from '../$.js'; import { getChildNodesArray } from '../shared/dom.js'; import { isFunction, isString, isElement, eachArray, } from '../shared/helper.js'; import './each.js'; import './insertAfter.js'; import './insertBefore.js'; /** * 是否不是 HTML 字符串(包裹在 <> 中) * @param target */ const isPlainText = (target) => { return isString(target) && !(target.startsWith('<') && target.endsWith('>')); }; eachArray(['before', 'after'], (name, nameIndex) => { // eslint-disable-next-line @typescript-eslint/no-explicit-any $.fn[name] = function (...args) { // after 方法,多个参数需要按参数顺序添加到元素后面,所以需要将参数顺序反向处理 if (nameIndex === 1) { args = args.reverse(); } return this.each((index, element) => { const targets = isFunction(args[0]) ? [args[0].call(element, index, element.innerHTML)] : args; eachArray(targets, (target) => { let $target; if (isPlainText(target)) { $target = $(getChildNodesArray(target, 'div')); } else if (index && isElement(target)) { $target = $(target.cloneNode(true)); } else { $target = $(target); } $target[nameIndex ? 'insertAfter' : 'insertBefore'](element); }); }); }; });