getdomdata
Version:
get dom data to object
43 lines (42 loc) • 1.1 kB
JavaScript
/*!
* getdomdata v0.0.3
* https://github.com/lemon3/getdomdata
*/
const p = (e) => e && typeof e == "object", u = (...e) => {
const r = {};
let c, t;
return e.forEach((o) => {
for (let a in o)
c = r[a], t = o[a], Array.isArray(c) && Array.isArray(t) ? r[a] = c.concat(...t) : p(c) && p(t) ? r[a] = u(c, t) : r[a] = t;
}), r;
}, b = (e) => {
e = e.replace(/[\\ \t\n\r'"]/gm, "").replace(/(\w+)/gi, '"$1"'), e[0] !== "{" && (e = `{${e}}`);
try {
return JSON.parse(e);
} catch (r) {
return !1;
}
}, i = (e) => {
if (!e.match(/[^\w]+/i))
return e;
e = e.replace(/'/g, '"');
try {
return JSON.parse(e);
} catch (r) {
return b(e);
}
}, h = (e, r) => {
if (!e || typeof e != "object")
return !1;
let c = {};
return e.getAttributeNames().filter((t) => t.substr(0, 5) === "data-").forEach((t) => {
const o = t.substr(5).split("-"), a = o.length, n = e.getAttribute(t), l = {};
let s = l;
o.forEach((f, y) => {
s[f] = a - 1 !== y ? {} : i(n), s = s[f];
}), c = u(c, l);
}), r ? c[r] : c;
};
export {
h as default
};