@mdui/jq
Version:
拥有和 jQuery 相似 API 的轻量级 JavaScript 工具库
41 lines (40 loc) • 1.52 kB
JavaScript
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);
});
});
};
});