-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathjQuery.lightDataBind.js
More file actions
58 lines (58 loc) · 1.92 KB
/
jQuery.lightDataBind.js
File metadata and controls
58 lines (58 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/**
* jQuery.lightDataBind by [watert](http://itswater.com/)
* usage:
* html:
* <div id="example"><span data-text="key"></span></div>
* javascript:
* var bindingFunctions = { funcName:function(dom,data){ if(data)dom.text(data.key+" by func. "); } };
* $("selector").ldata({key:"value"},bindingFunctions);
*/
(function($){
$.fn.ldatabind = $.fn.ldata = function(data,binds){
var that = this,
$el = $(this);
binds = $.extend($el.data("ldata-bind")||{},binds||{});
$el.data("ldata-bind",binds);
var isObject = function(value){ return typeof(value)==="object"&&value!=null; };
var isVal = function(value){
return value||value==""||value==0;
};
var attrs = {
"data-func":function(dom,value,key,reverse){
var f = binds[key];
if(key&&f){
if(!reverse)f(dom,data);
else { return f(dom); }
} else { console.warn("No func specified: ",key); }
},
"data-text":function(dom,value){ return isVal(value)?dom.text(value):dom.text(); },
"data-html":function(dom,value){ return isVal(value)?dom.html(value):dom.html(); },
"data-src":function(dom,value){ return isVal(value)?dom.attr("src",value):dom.attr("src"); },
"data-href":function(dom,value){ return isVal(value)?dom.attr("href",value):dom.attr("href"); },
"data-value":function(dom,value){ return isVal(value)?dom.val(value):dom.val(); }
};
if(!data){ // dom to obj
data = {};
$.each(attrs,function(attr,bindFunc){
$("["+attr+"]",that).each(function(){
var d = $(this);
var key = d.attr(attr);
var val = bindFunc(d,null,key,true);
if(isObject(val)){ $.extend(true,data,val); }
else if(isVal(val))data[key] = val;
});
});
return data;
}else { // obj to dom
$.each(attrs,function(attr,bindFunc){
$("["+attr+"]",that).each(function(){
var d = $(this);
var key = d.attr(attr);
var value = data[key];
bindFunc(d,value,key);
});
});
}
return $el;
};
})(jQuery);