UNPKG

domtastic

Version:

Small, fast, and modular DOM and event library for modern browsers.

61 lines (48 loc) 1.81 kB
/** * @module Data */ import { each } from '../util'; const isSupportsDataSet = typeof document !== 'undefined' && 'dataset' in document.documentElement; const DATAKEYPROP = isSupportsDataSet ? 'dataset' : '__DOMTASTIC_DATA__'; const camelize = str => str.replace(/-+(.)?/g, (match, char) => char ? char.toUpperCase() : ''); /** * Get data from first element, or set data for each element in the collection. * * @param {String} key The key for the data to get or set. * @param {String} [value] The data to set. * @return {Object} The wrapped collection * @chainable * @example * $('.item').data('attrName'); // get * $('.item').data('attrName', {any: 'data'}); // set */ export const data = function(key, value) { if(typeof key === 'string' && typeof value === 'undefined') { const element = this.nodeType ? this : this[0]; return element && DATAKEYPROP in element ? element[DATAKEYPROP][camelize(key)] : undefined; } return each(this, element => { if(!isSupportsDataSet) { element[DATAKEYPROP] = element[DATAKEYPROP] || {}; } element[DATAKEYPROP][camelize(key)] = value; }); }; /** * Get property from first element, or set property on each element in the collection. * * @param {String} key The name of the property to get or set. * @param {String} [value] The value of the property to set. * @return {Object} The wrapped collection * @chainable * @example * $('.item').prop('attrName'); // get * $('.item').prop('attrName', 'attrValue'); // set */ export const prop = function(key, value) { if(typeof key === 'string' && typeof value === 'undefined') { const element = this.nodeType ? this : this[0]; return element && element ? element[key] : undefined; } return each(this, element => element[key] = value); };