@mdui/jq
Version:
拥有和 jQuery 相似 API 的轻量级 JavaScript 工具库
46 lines (45 loc) • 1.47 kB
JavaScript
import { $ } from '../$.js';
import { dataAttr, get, getAll, set, setAll } from '../shared/data.js';
import { isUndefined, isObjectLike, eachObject, toCamelCase, } from '../shared/helper.js';
import './each.js';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
$.fn.data = function (key, value) {
// 获取所有值
if (isUndefined(key)) {
if (!this.length) {
return undefined;
}
const element = this[0];
const resultData = getAll(element);
// window, document 上不存在 `dataset`
if (element.nodeType !== 1) {
return resultData;
}
// 若值未通过 data 方法设置,则从 `dataset` 中获取值。dataset 中读取的 key 会自动转为驼峰法
eachObject(element.dataset, (key) => {
resultData[key] = dataAttr(element, key, resultData[key]);
});
return resultData;
}
// 同时设置多个值
if (isObjectLike(key)) {
return this.each(function () {
setAll(this, key);
});
}
// value 传入了 undefined
if (arguments.length === 2 && isUndefined(value)) {
return this;
}
// 设置值
if (!isUndefined(value)) {
return this.each(function () {
set(this, key, value);
});
}
// 获取值
if (!this.length) {
return undefined;
}
return dataAttr(this[0], toCamelCase(key), get(this[0], key));
};