Posted in Javascript onMarch 16, 2011
jProviderData
/// <reference path="jUtil.js" /> $j = jQuery.noConflict(); (function ($j) { $j.providerData={ defaultSettings: { select_Span_Items: false, select_TD_Items: false, select_LI_Items: false }, init:function(options){ opts = $j.extend({}, $j.providerData.defaultSettings, options); singleItemJsonFormat='"{0}":"{1}"'; divItemFormat='{{0}}'; tableItemFormat='{0}'; }, getDataName:function(item){ var dataName = item.attr("dataname"); if(typeof dataName === 'undefined'||dataName==""){ dataName = item.attr("Id"); } if(typeof dataName === 'undefined'||dataName==""){ dataName=item.text(); } if(typeof dataName === 'undefined'||dataName==""){ dataName=item[0].innerText; } return dataName; }, getData:function(selector){ //var selector=opts.selector; var items; if(typeof selector!=="object"){ items=$j(selector); } else{ items=selector; } var retJsonValue=""; var subSelector=":input"; if (opts.select_Span_Items) { subSelector = subSelector + ",span"; } if (opts.select_LI_Items) { subSelector = subSelector + ",li"; } if(opts.select_TD_Items){ subSelector = subSelector + ",td"; } $j.each(items,function(i,item){ var t=$j(this); var dataName=$j.providerData.getDataName(t); //return:'{"dataname":"value"}' if($j.util.isInput(t)){ var value=t.val(); var itemStr= String.format(singleItemJsonFormat,dataName,value); retJsonValue=retJsonValue+itemStr+","; retJsonValue=retJsonValue.trimEnd(","); } //return:'{"dataname1":"value1","dataname2":"value2"}' else if($j.util.isDiv(t)){ var subItems = t.find(subSelector); var subStr = ""; $j.each(subItems, function (i, subItem) { //递归调用 处理子元素 var tempSubItemStr = $j.providerData.getData("#"+$j(this).attr("id")); subStr = subStr + "," + tempSubItemStr; }) subStr=subStr.trimStart(","); retJsonValue=String.format(divItemFormat,subStr); } //return:'[{"dataname1":"value1","dataname2":"value2"},{"dataname1":"value3","dataname2":"value4"}]' else if($j.util.isTable(t)){ var trItems=t.find("TR:gt(0)"); //迭代处理Table中的每一行 $j.each(trItems,function(i,trItem){ //处理行,找出行中的要收集数据的元素 var subItems =$j(this).find(subSelector); var subStr = ""; //迭代处理行中所有需要收集数据的元素 $j.each(subItems,function(i,subItem){ if($j.util.isInput($j(this))){ var tempSubItemStr = $j.providerData.getData("#"+$j(this).attr("id")); subStr = subStr + "," + tempSubItemStr; } else{ //如果是TD元素,且他里面不包含INPUT元素 if( $j.util.isTD($j(this)) && ($j(this).find(":input").length==0)){ var tempSubItemStr = $j.providerData.getData($j(this)); subStr = subStr + "," + tempSubItemStr; } } }); subStr=subStr.trimStart(","); retJsonValue= retJsonValue+String.format(divItemFormat,subStr)+","; }); retJsonValue=retJsonValue.trimEnd(","); retJsonValue="["+retJsonValue+"]"; } //return:'{"dataname":"value"}' else if($j.util.isLi(t)){ var value=t.text(); var itemStr= String.format(singleItemJsonFormat,dataName,value); retJsonValue=retJsonValue+itemStr+","; retJsonValue=retJsonValue.trimEnd(","); } //return:'{"dataname":"value"}' else if($j.util.isTD(t)){ var value=t.text(); // var rowIndex = t.parent().prevAll().length; //获取当前列的列索引 var colIndex = t.prevAll().length; //dataName由列的的列头中dataName属性决定,如果找不到由列头的内容决定 var thItem=t.parent().parent().parent().find("th:eq("+colIndex+")"); if(thItem.length==1){ dataName=$j.providerData.getDataName(thItem); } var itemStr= String.format(singleItemJsonFormat,dataName,value); retJsonValue=retJsonValue+itemStr+","; retJsonValue=retJsonValue.trimEnd(","); } }); return retJsonValue; } }; jProviderData=function(options){ $j.providerData.init(options); return $j.providerData.getData(options.selector); }; })(jQuery);
String.prototype.trimStart = function(trimStr){ if(!trimStr){return this;} var temp = this; while(true){ if(temp.substr(0,trimStr.length)!=trimStr){ break; } temp = temp.substr(trimStr.length); } return temp; }; String.prototype.trimEnd = function(trimStr){ if(!trimStr){return this;} var temp = this; while(true){ if(temp.substr(temp.length-trimStr.length,trimStr.length)!=trimStr){ break; } temp = temp.substr(0,temp.length-trimStr.length); } return temp; }; String.prototype.trim = function(trimStr){ var temp = trimStr; if(!trimStr){temp=" ";} return this.trimStart(temp).trimEnd(temp); }; String.format = function () { if (arguments.length == 0) { return null; } var str = arguments[0]; for (var i = 1; i < arguments.length; i++) { var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm'); str = str.replace(re, arguments[i]); } return str; } (function ($j) { $j.util = { _compareTagName : function (item, tagName) { return item.attr("tagName").toUpperCase() == tagName.toUpperCase(); }, isTable: function (item) { return $j.util._compareTagName(item, "TABLE"); }, isDiv: function (item) { return $j.util._compareTagName(item, "DIV"); }, isInput: function (item) { return $j.util._compareTagName(item, "INPUT"); }, isSpan: function (item) { return $j.util._compareTagName(item, "SPAN"); }, isLi: function (item) { return $j.util._compareTagName(item, "LI"); }, isTD: function (item) { return $j.util._compareTagName(item, "TD"); } }; })(jQuery);
jQuery前台数据获取实现代码
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@