Skip to content

Instantly share code, notes, and snippets.

@atomer
Created July 25, 2011 01:51
Show Gist options
  • Save atomer/1103395 to your computer and use it in GitHub Desktop.
Save atomer/1103395 to your computer and use it in GitHub Desktop.
jQuery.widgetのoptionのような機構
<div id="hoge">
<div class="foo"></div>
</div>
/**
* @param target Object|HTMLElement
* @param ns String
* @param defaultData Object
* @return Function
* @example
// ex1
var obj = {};
obj.data = dataPacker(obj);
obj.data("hoge", "value");
// ex2
var obj = {};
var el = document.getElementById("foo");
obj.elements = dataPacker(el);
obj.elements("fuga", ".fuga");
*/
function dataPacker(target, ns, defaultData) {
var nsList, data, self, packer;
if (!ns) {
ns = "_dataPacker";
}
if (target.tagName) {
self = target;
target= {};
}
nsList = ns.split(".");
data = target;
for (var i = 0, len = nsList.length; i < len; i++) {
data[nsList[i]] = data[nsList[i]] || {};
data = data[nsList[i]];
}
packer = function(name, value) {
var el;
switch (arguments.length) {
case 1:
return data[name];
case 2:
if (!self) {
data[name] = value;
} else {
el = self.querySelectorAll(value);
if (el) {
data[name] = el.length > 0 ? el : el[0];
} else {
data[name] = null;
}
}
return value;
default:
return data;
}
};
if (defaultData) {
for (var name in defaultData) {
packer(name, defaultData[name]);
}
}
return packer;
}
name: dataPacker.js
description: jQuery.widgetのoptionのような機構
authors:
- atomer
resources:
normalize_css: no
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment