JQuery技巧|教你如何更快的赋值取值
2016-07-05 16:20
337 查看
显示数据时,常规赋值与取值是这样的.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // set $( "#name" ).val(data.name); $( "#realname" ).val(data.realname); $( "#address" ).val(data.address); $( "#sex" ).val(data.name); $( "#love" ).attr(!!data.love); // get var data ={ name:$( "#name" ).val(), realname:$( "#realname" ).val(), address:$( "#address" ).val(), sex:$( "#sex" ).val(), love:$( "#love" ).attr( 'checked' ) }; |
总结楼主的需求,获取到一个实体对象,直接将对象的数据赋值到页面的控件中。根据实体对象的定义,直接取得页面上控件的值,以对象形式返回。
实现
看不明白没关系,大意就是这样,先来看看页面与js调用是怎么写的。1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <form id= "form1" > <input type= "text" name= "uid" /> <input type= "text" name= "pwd" /> <input type= "checkbox" name= "love" /> <input type= "radio" name= "g1" value= "1" /> <input type= "radio" name= "g1" value= "2" /> <input type= "radio" name= "g1" value= "3" /> <input type= "text" name= "gselect" value /> <select name= "sl" > <option value= "11" >11</option> <option value= "22" >22</option> </select> </form> <input type= "button" id= "btn" value= "取值" /> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var data ={ uid: 'cnblogs' , pwd: '12345' , sl: '22' , love: true , g1: '3' , gselect: function () { return $( "#form1 [name=g1]:checked" ).val(); } }; $( "#btn" ).on( 'click' , function () { var d =$( "#form1" ).getModel(data); alert(JSON.stringify(d)); }); $( "#form1" ).setModel(data); |
初步实现是这样的,可以根据实际的应用做修改。
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 59 60 61 | (function ($) { function BindModel(p) { p =$.extend({ method: 'get' , data: {}}, p); var isGet =p.method == "get" ; var ret ={}; for (var name in p.data) { var $name =$(p.container).find( "[name='" + name + "']" ); //未找到则跳过 if (!$name.length) continue ; //获取当前对象值 var value; if ( typeof p.data[name] == "function" ) { //为函数时,取值就终止 if (isGet){ ret[name] =p.data[name].call(); continue ; } else { value =p.data[name].call(); } } else { value =p.data[name]; } //根据控件类型来赋值 var tag =$name[0].tagName; var t =$name.attr( "type" ); if (tag == "SELECT" || t == "text" ) { if (isGet)ret[name] =$name.val(); else $name.val(value || '' ); } else if (t == "checkbox" ) { if (isGet)ret[name] =!!$name.attr( 'checked' ); else $name.attr( 'checked' , !!value); } else if (t == "radio" ) { //单选框name相同为一组,根据value来区分啦 $name.each(function () { if (isGet && this . checked ) { ret[name] = this .value; return false ; } else if (!isGet && this .value ==value) { this . checked = true ; } }); } else if (tag == 'TD' || tag == 'SPAN' ) { if (isGet)ret[name] =$name.text(); else $name.text(value) } } if (isGet) return ret; } $.fn.setModel =function (data) { BindModel({ method: 'set' , data: data, container: this }); } $.fn.getModel =function (data) { return BindModel({ method: 'get' , data: data, container: this }); } })(jQuery); |
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- JavaScript演示排序算法
- 2015-2016网页设计趋势分析 Web Design of Trends
- jQuery Ajax 跨域调用
- 我是运营,我没有假期
- 移动端的长按事件
- jquery教程靠边站,一分钱不花让你免费学会jquery
- JQuery+Strusts1.x无刷新登录
- 职场中越皮实的员工,越招领导喜欢!
- $.ajax()方法详解
- jQuery ajax - ajax() 方法
- 最近发现一款超牛的记单词软件,分享一下
- 启动Agent 报错,-4 错误
- 桌面虚拟化技术:旧风潮再次来袭
- 0403-027 The parameter list is too long
- 公司的网络为何如此缓慢
- IDC机房实战MRTG
- 匹配也惹祸
- IP 防盗有法
- 封Q进行时