jQuery插件第五十五:批量获取值返回Json字符串
来源:互联网 发布:软件测试流生命周期 编辑:程序博客网 时间:2024/05/01 06:02
对各种表单元素统一使用etext()这个方法来获取其中的值,单个输入框返回“[value]”。多个输入框同时取值会自动返回Json格式字符串。 复选框多个选择项的值会用"," 间隔。对没有子节点只有文字内容的span和div取值。在不清楚标签的情况下有用。比如说,在添加商品订单的页面,可针对商品明细表格设置数据行选择器 ,进行json字符串处理,随同订单其他数据一起提交到后端。
/** jQuery etext plugin 0.2** Copyright (c) 2015 chinet_bridge** 批量获取值返回Json字符串插件 0.2版**///Json对象转字符串var Obj2str = function (o) { if (o == undefined) { return ""; } var r = []; if (typeof o == "string") return "\"" + o.replace(/([\"\\])/g, "\\$1").replace(/(\n)/g, "\\n").replace(/(\r)/g, "\\r").replace(/(\t)/g, "\\t") + "\""; if (typeof o == "object") { if (!o.sort) { for (var i in o) r.push("\"" + i + "\":" + Obj2str(o[i])); if (!!document.all && !/^\n?function\s*toString\(\)\s*\{\n?\s*\[native code\]\n?\s*\}\n?\s*$/.test(o.toString)) { r.push("toString:" + o.toString.toString()); } r = "{" + r.join() + "}" } else { for (var i = 0; i < o.length; i++) { r.push(Obj2str(o[i])); } r = "[" + r.join() + "]"; } return r; } return o.toString().replace(/\"\:/g, '":""');}; (function (d, b) { d.fn.etext= function(options){ var defaults={ rowSelector:null}; var opts = d.extend({},defaults, options); var l, k = this,n=[],chkboxname,chkboxlen; d.extend(d.expr[ ":" ], { isText: function( k ) { return d(k).text() != "" && d(k).html().indexOf('>')==-1; } }); if(k.is(":input,:isText")){ k.each(function(){ var m = d(this); if (m.is(":radio")) { chkboxname=''; if(!m.is(":checked")){return true; } l = m.is(":checked")?d.trim(m.val()):""; n.push(l); }else if (m.is(":checkbox")) { if(!m.is(":checked")){return true; } if(chkboxname==m.attr('name')) { l += m.is(":checked")?d.trim(m.val())+ ",":""; chkboxlen--; }else{ l = m.is(":checked")?d.trim(m.val())+ ",":""; chkboxname=m.attr('name'); chkboxlen=d(':checkbox[name='+m.attr('name')+']:checked').length; chkboxlen--; } if(chkboxlen==0){ l =(l+',').replace(',,',''); n.push(l); } }else if(m.is(":input")){ chkboxname=''; l = m.val();l = d.trim(l); n.push(l); }else if(m.is(":isText")){ chkboxname='';l = m.text();l = d.trim(l); n.push(l); } }); }else{ var builder = function(row){ var jo={}; row.find(":input,div,span").each(function(){ var m = d(this); if (m.is(":radio")) { chkboxname=''; if(!m.is(":checked")){return true; } l = m.is(":checked")?d.trim(m.val()):""; jo[m.attr("name")]=l; }else if (m.is(":checkbox")) { if(!m.is(":checked")){return true; } if(chkboxname==m.attr('name')) { l += m.is(":checked")?d.trim(m.val())+ ",":""; chkboxlen--; }else{ l = m.is(":checked")?d.trim(m.val())+ ",":""; chkboxname=m.attr('name'); chkboxlen=row.find(':checkbox[name='+m.attr('name')+']:checked').length; chkboxlen--; } if(chkboxlen==0){ l =(l+',').replace(',,',''); jo[m.attr("name")]=l; } }else if(m.is(":input")){ chkboxname=''; l = m.val(); l = d.trim(l); jo[m.attr("name")]=l; }else if(m.is(":isText")){ chkboxname='';l = m.text();l = d.trim(l); jo[m.attr("name")]=l; } }); //直接push json对象不行,会替换之前的数组元素,调试发现转成字符串就不会造成数组元素的数据错乱 n[n.length] = Obj2str(jo); } if(opts.rowSelector==null){ builder(k); }else{ k.find(opts.rowSelector).each(function(){ var _k=$(this); builder(_k); }); } } return "["+n.join()+"]"; }})(jQuery);
以下为调用例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <script src="jquery-1.9.1.min.js" type="text/javascript"></script> <script type="text/javascript" src="jquery.etext.js"></script></head><body> <form id="form1"> <div id="div1" > <input type="text" id="Text1" name="Text1" /> <input type="text" id="Text11" name="Text11" /> <input type="text" id="Text2" name="Text2" /> <input type="radio" id="Radio1" name="Text5" value="1" /> YES <input type="radio" id="Radio2" name="Text5" value="2" /> No <input type="checkbox" id="chkbox1" name="Chkbox" value="甲" /> 甲 <input type="checkbox" id="chkbox2" name="Chkbox" value="乙" /> 乙 <span id="ufo" name="UFO">4242</span> </div> <div id="div2"> <input type="text" id="Text3" name="Text1" /> <input type="text" id="Text4" name="Text11" /> <input type="text" id="Text5" name="Text2" /> <input type="radio" id="Radio3" name="Text5" value="1" /> YES <input type="radio" id="Radio4" name="Text5" value="2" /> No <input type="checkbox" id="Checkbox1" name="Chkbox" value="甲" /> 甲 <input type="checkbox" id="Checkbox2" name="Chkbox" value="乙" /> 乙 <span id="Span1" name="UFO">4242</span> </div> </form> <input type="button" id="submit" value="获取值" /> <script language="javascript"> $("#submit").click(function () { var json = $("#form1").etext({ rowSelector: "div" }); alert(json); }); </script></body></html>
0 0
- jQuery插件第五十五:批量获取值返回Json字符串
- jQuery插件第五十四:无区别批量获取值
- jQuery插件第五十二:无刷新批量上传文件
- Jquery Ajax返回Json字符串 拼接table
- jQuery获取servlet返回的JSON
- jQuery获取servlet返回的JSON
- JQuery-Ajax获取后台返回的字符串。
- jquery File Upload 插件应用之解析返回json对象
- 获取jquery ajax 返回值
- 获取 jQuery success 返回值
- jquery json返回值为何为undfinded?
- jquery ajax处理json返回值
- 以jquery插件形式获取json数据实现级联
- ajax获取json数据使用jquery分页插件显示
- JQuery遍历返回json
- 使用JQuery.js & JQuery.form.js 插件完成对StrutsAction的异步请求,返回JSON数据
- jQuery JSON转换 数组转字符串 获取显示器长宽
- 用jquery获取xml页面 以json字符串格式输出
- gfdshgfdsh46987
- c++ primner plus 10.1
- 重载、隐藏和重写(有的书叫“覆盖”)的区别?
- UVa 10359 - Tiling
- Cassandra数据分布之5分区器
- jQuery插件第五十五:批量获取值返回Json字符串
- position属性absolute与relative 详解
- java解惑之Calendar
- Apache ZooKeeper交流
- do...while(0)的妙用
- [POI2000]啤酒厂选址
- 输入一些数,按从小到大排序
- 网络请求 Get & Post 方法(整理)
- 第6周-思维导图-第8、9章知识点