早些时候设计的table拼装插件(初稿)

/**
*Assemble Table
*@param(JSON) settings{tableFormat,tHead,results,tableId,convertFunc}
*tableFormat(Array): inculde four types{normal,input,dataHandle,redirect}
*thead(Array): define the head of the table,etc.tHead = [{title:title1,width:***%},{}...]
*results(Array): the data from background
*tableId(String): the ID of table container
*convertFunc(Function): if you need to use custom convert function to handle data,you can use this param
*
*For example:
*--------------------------------------------------------------------------------------------------------
*define tHead:
*tHead = [{title:"name1",width:"50%"},{title:"name2",width:"50%"}];
*
*define tableFormat:
*tableFormat= ["input,type:radio,attrs:[key2,key3]","normal"];
*
*assemble table:
*$.paxTableAssemble({
* tableFormat:tableFormat,
* tHead:tHead,
* results:REC,
* tableId:"evt_table"
*});
*--------------------------------------------------------------------------------------------------------
**/
(function($){
$.paxTableAssemble = function(settings){
var deleteItem = []; //the properties need to be deleted
var formatString = {
normal:"^normal$", //match string 'normal'
input:"^input\\,type\\:(checkbox|radio)(?:\\,attrs:(\\[.*(?:\\,.*)*\\]))?$", //match string 'input,type:checkbox,attrs:[a,b,c...]'
dataHandle:"^dataHandle\\,((?:convert\\:help|custom)|(?:format\\:string|date)|(?:combine\\:\\[.+\\,.+(?:,.+)*\\]))(,decode)?$", //match string 'dataHandle,convert,decode or combine:[1,2,3...],decode'
redirect:"^redirect\\,(project|download|view|detail)\\,prv_cd\\:([a-z]{3}[0-9]{6})\\,url\\:(.*)\\,param\\:\\[(.*(?:\\,.*)*)\\]$", //match string 'redirect,project,prv_cd:rms010101,param:[a,b,c...]'
email:"^email$" //match string 'email'
}

settings = $.extend({
tableFormat:[], //normal,input,dataHandle,redirect
tHead:[], //tHead = [{title:title1,width:***%},{}...]
results:[],
tableId:"",
convertFunc:function(){}
},settings || {});

/*define function*/
var assembleTbHead = function(tHeadArr){
if(tHeadArr.length == 0)return null;
var th = "<thead><tr>";
for(var i = 0;i < tHeadArr.length;i ++){
th += "<td style=\"width:" + tHeadArr[i].width + "\">" + tHeadArr[i].title + "</td>";
}
th += "</tr></thead>";
return th;
}

var assembleTd = function(str,obj,result){
if(str == null || typeof str == "undefined" || str == "")return null;
var td = "";
var p = (str.indexOf(",") > -1)?str.substring(0,str.indexOf(",")) : str;
var re = new RegExp(formatString[p],"ig");
if(re.test(str)){
switch(p){
case "normal":{
td = normalAssemble(result);
break;
}
case "input":{
td = inputAssemble(RegExp.$1,RegExp.$2,obj,result);
break;
}
case "dataHandle":{
td = dataHandleAssemble(RegExp.$1,RegExp.$2,obj,result);
break;
}
case "redirect":{
td = redirectAssemble(RegExp.$1,RegExp.$2,RegExp.$3,RegExp.$4,obj,result);
break;
}
case "email":{
td = emailAssemble(result);
}
default:break;
}
}

return td;
}

var normalAssemble = function(result,decode){
//if(decode)result = decodeURI(result);
var tdData = subString(result,20);
return "<td title=\"" + result + "\">" + tdData + "</td>";
}

var inputAssemble = function(type,attrs,obj,result){
var attrName = getAttrNameByValue(obj,result);
var td = "<td><input type=\"" + type + "\" name=\"" + attrName + "\" value=\"" + result + "\" ";
if(attrs == null || typeof attrs == "undefined" || attrs == "")return td + "/></td>";
attrs = attrs.split(",");
for(var i = 0;i < attrs.length;i ++){
td += attrs[i] + "=\"" + obj[attrs[i]] + "\" ";
}
td += "/></td>";
return td;
}

var dataHandleAssemble = function(handleType,decode,obj,result){
if(handleType == null || handleType == "undefined" || handleType == "")return null;
var td = "<td title=\"";
var hType = (handleType.indexOf(":") > -1)? handleType.split(":") : toArray(handleType);
switch(hType[0]){
case "convert":{
if(decode)result = decodeURI(result);
if(hType[1]&&hType[1] == "help"){
td += _convertData(obj,result,false) + "\">" + _convertData(obj,result,false) + "</td>";
}
if(hType[1]&&hType[1] == "custom"){
td += _convertData(obj,result,true) + "\">" + _convertData(obj,result,true) + "</td>";
}
break;
}
case "format":{
if(decode)result = decodeURI(result);
if(hType[1] && hType[1] == "date") {
result = _formatDateStr(result);
var tdData = subString(result,20);
td += result + "\">" + tdData + "</td>";
}
if(hType[1] && hType[1] == "string"){
result = _formatStr(result);
var tdData = subString(result,20);
td += result + "\">" + tdData + "</td>";
}
break;
}
case "combine":{
var names = hType[1].replace(/^\[|\]$/g,"").split(",");
var DataArr = [];
for(var i = 0;i < names.length;i ++){
DataArr.push(obj[names[i]]);
if(i > 0){
deleteItem.push(names[i]);
}
}
var tdData = DataArr.join("/");
td += tdData + "\">" + subString(tdData,20) + "</td>";
break;
}
default:
break;
}

function _formatDateStr(dateStr) {
return formatDate(dateStr);
}

function _formatStr(str) {
return format(str);
}

function _convertData(obj,result,custom){
if(custom){
if(!!settings.convertFunc){
var func = settings.convertFunc;
return func.call(this,result);
}
}
var helper = DictHelper();
var attrName = getAttrNameByValue(obj,result);
return helper.convert(attrName,result);
}

return td;
}

var redirectAssemble = function(redirectType,prv_cd,url,param,obj,result) {
if(redirectType == null || typeof redirectType == "undefined" || redirectType == "")return null;
var td = "<td title=\"" + result + "\">";
switch(redirectType){
case "project":
td += "<a prv_cd=\"" + prv_cd + "\" class=\"table_link\" href=\"" + formatURL(obj,url,param) + "\">" + result + "</a></td>";
break;
case "view":
td += "<hh:a prv_cd=\"" + prv_cd + "\" class=\"table_link\" href=\"" + formatURL(obj,url,param) + "\">view</hh:a></td>";
break;
case "detail":
td += "<hh:a prv_cd=\"" + prv_cd + "\" class=\"table_link\" href=\"" + formatURL(obj,url,param) + "\">detail</hh:a></td>";
break;
case "download":
td += "<hh:a prv_cd=\"" + prv_cd + "target=\"_blank\" \" class=\"table_link\" href=\"" + formatURL(obj,url,param) + "\">" + result + "</hh:a></td>";
break;
default:
break;
}
return td;
}

var getAttrNameByValue = function(obj,value){
if(!obj||typeof obj != "Object")return null;
for(var o in obj){
if(obj[o] == value && obj.hasOwnProperty(o)){
return o;
}
}
return null;
}

var emailAssemble = function(result) {
//if(decode)result = decodeURI(result);
return "<td class=\"table_link\"><a href=\"mailto:" + result + "\">" + result + "</a></td>";
}

var subString = function(stringValue,len){
if(stringValue.length > len){
return stringValue.substring(0,len) + "...";
}
else{
return stringValue;
}
}

var toArray = function(str) {
if (str != null && str.constructor != Array) {
var array = [];
array.push(str);
return array;
} else {
return str;
}
}


var formatURL = function(obj,url,param){
//if(!isUrl(url))return null;
var paramArr = [];
param = (param.indexOf(",") > -1)? param.split(",") : param;
if(param.constructor != Array)return url + "?" + param + "=" + obj[param];
for(var i = 0;i < param.length;i ++){
var tmp = param[i] + "=" + obj[param[i]];
paramArr.push(tmp);
}
return url + "?" + paramArr.join("&");
}
/*function define end*/

/*main*/
var REC = settings.results,tbHead = "",tbBody = "",tbFormatArr = settings.tableFormat,count = 0;
var tbHtml = "<table>";
tbHead = assembleTbHead(settings.tHead);
if(typeof(REC)!="undefined"){
tbBody += "<tbody>"
for(var i = 0;i < REC.length;i ++){
tbBody += "<tr>";
for(var o in REC[i]){
tbBody += assembleTd(tbFormatArr[count],REC[i],REC[i][o]);
if(deleteItem.length > 0){ //handle combine data situation
for(var j = 0;j < deleteItem.length;j ++){
if(REC[i].hasOwnProperty(deleteItem[j])){
delete REC[i][deleteItem[j]];
}
}
}
count ++;
}
deleteItem = [];
tbBody += "</tr>";
count = 0;
}
tbBody += "</tbody>"
tbHtml += tbHead + tbBody;
tbHtml += "</table>";
if(settings.tableId == null || typeof settings.tableId == "undefined" || settings.tableId == ""){
alert("Please select a table!");
}
else{
$("#" + settings.tableId).html(tbHtml).find("tr:nth-child(even)").addClass("tr_even");
}
}
else{
tbHtml += tbHead + "<tbody><tr><td colspan=\"" + settings.tHead.length + "\">No records</td></tr></tbody></table>";
$("#" + settings.tableId).html(tbHtml);
}
/*main end*/
}
})(jQuery)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值