最近项目中使用到一个table表格,表格的样子如下:

可以修改数量,以及折扣,对应的最终价会相应的变化。

随手写了份插件,命名为JTable,可以给热爱jquery 的友友们一个参考:

代码如下:

/**
* Created by oshine on 14-7-23.
*/
(function($){
var JTable = function(setting){ var defaultSetting = { header:["服务内容","数量","单价(元)","总价(元)","量词","原价(元)","折扣","最终价(元)"],
items:[
{name:"默认内容1",num:1,defaultPrice:300},
{name:"默认内容2",num:1,defaultPrice:300},
{name:"默认内容3",num:1,defaultPrice:300},
{name:"默认内容4",num:1,defaultPrice:300}
],
unit:"半年",
discount:100,
serve_id:0,
id:0
}; setting = $.extend(defaultSetting,setting); this.header = setting.header;
this.container = setting.container;
this.items = setting.items;
this.discount = setting.discount*100;
this.unit = setting.unit;
this.serve_id = setting.serve_id;
this.name = setting.name;
this.default_price = setting.default_price;
this.id = setting.id;
this.isDesign = setting.isDesign;
this.init();
} JTable.prototype = {
init:function(){ var self = this;
self.refresh();
},
refresh:function(){
var self = this;
console.dir(self.items);
$(self.container).html(self.buildTable()+self.buildData()); $(self.container).find("input[name=child-num]").unbind();
$(self.container).find("input[name=child-num]").change(function(){ var k = $(this).parent().parent().attr("data-id");
self.items[k].num = $(this).val(); self.refresh();
}); $(self.container).find("input[name=package-discount]").change(function(){
self.discount = $(this).val();
self.refresh();
}); }, buildTable:function(){
return "<table>"+this.buildHeader()+this.buildBody()+"</table>";
}, jsonData:function(){
return JSON.stringify({id:this.id,serve_id:this.serve_id,isDesign:this.isDesign,name:this.name,default_price:this.default_price,discount:this.discount,unit:this.unit,cost_price:this.getCostPrice(),final_price:this.getFinalPrice(),items:this.items});
},
buildData:function(){
return "<input type='hidden' contract='true' value='"+this.jsonData()+"' name='data'/>";
}, buildHeader:function(){ var html = "<thead><tr>"; $.each(this.header,function(k,v){
html+="<th>"+v+"</th>";
})
return html+"</tr></thead>";
}, getCostPrice:function(){
var costPrice = 0; $.each(this.items,function(k,v){costPrice+=(v.num* v.defaultPrice);});
return costPrice;
},
getFinalPrice:function(){
return this.getCostPrice()*(this.discount/100);
},
buildBody:function(){
var self = this;
var html = "<tbody>";
var length = self.items.length;
$.each(this.items,function(k,v){
var tr = "<tr data-id="+k+">";
if(k==0){
tr+='<td class="item-name">'+ v.name+'</td>'+
'<td><input class="text-field" type="text" value="'+ v.num+'" name="child-num"></td>'+
'<td>'+ v.defaultPrice+'</td>'+
'<td>'+ (v.num*v.defaultPrice)+'</td>'+
'<td rowspan="'+ length+'">'+self.unit+'</td>'+
'<td rowspan="'+length+'">'+self.getCostPrice()+'</td>'+
'<td rowspan="'+ length+'"><input class="text-field" type="text" value="'+self.discount+'" name="package-discount"/>%</td>'+
'<td rowspan="'+ length+'">'+self.getFinalPrice()+'</td>';
}else
{
tr+='<td class="item-name">'+ v.name+'</td>'+
'<td><input class="text-field" type="text" value="'+ v.num+'" name="child-num"></td>'+
'<td>'+ v.defaultPrice+'</td>'+
'<td>'+ (v.num*v.defaultPrice)+'</td>';
}
tr+="</tr>";
html+=tr;
});
return html+"</tbody>";
}
} $.fn.extend({
JTable:function(){
var data = eval('('+$(this).attr("data")+')');
var setting = $.extend({container: $(this)},data);
return new JTable(setting);
}
});
})($);

使用:

HTML:

<div data="{'id':'7073','quoted_id':'616','uid':'176','serve_id':'2','name':'无线端站外推广套餐','default_price':'16800.00','discount':'0.9000','final_price':'15120.00','percentage':null,'description':'','unit':'季度','children':null,'is_design':null,'items':[{'id':'57760','packageId':'7073','name':'无线站外推广','num':'3','defaultPrice':'2400.00','unit':'季度','finalPrice':'7200.00','isDesign':null},{'id':'57761','packageId':'7073','name':'无线站外推广维度优化','num':'1','defaultPrice':'1200.00','unit':'季度','finalPrice':'1200.00','isDesign':null},{'id':'57762','packageId':'7073','name':'无线站外推广周报(数据分析+优化建议)','num':'1','defaultPrice':'2400.00','unit':'季度','finalPrice':'2400.00','isDesign':null}]}" class="constract-JTable">
</div>

Javascript:

$(document).ready(function(){
$(".constract-JTable").JTable();
});

代码写的一般般,可以优化下哦。

JTable的应用的更多相关文章

  1. swing中JTable的使用方法

    public static void main(String[] args) { Student s1 = new Student("张三", "001", 0 ...

  2. Jtable 表格按多列排序(支持中文汉字排序)

    这两天公司让做一个Jtable表格的排序,首先按A列排序,在A列相等时按B列排序,B列相等时按C列排序,ABC三列可以任意指定,最多分三列,这样的一个需求.由于我是大神,所以必须做了出来.ok,不自恋 ...

  3. Java — JTree and JTable以及sqlServer的两种连接

    使用JTree的步骤: 暂时只能创建一个头结点,创建一个树的结点作为头结点(其子结点也是相同的创建方法):DefaultMutableTreeNode headNode = new DefaultMu ...

  4. ABP JTable如何手动刷新子表数据

    function getSubMaster() { _$masterTable.find('.jtable-child-table-container').jtable('reload'); }

  5. jtable插件api

    官网2016-03-15 事例图: 一.客户端配置 1. paging boolean default:false 配置是否分页,果断改为true. 2. pageList string defaul ...

  6. ASP.NET ZERO 学习 JTable的使用子表闭合功能

    双击子表自动判定开闭功能 //CHILD TABLE DEFINITION FOR "PHONE NUMBERS" Phones: { title: '', width: '5%' ...

  7. ASP.NET ZERO 学习 JTable的ChildTable用法

    效果图: Jtable的子表用法: _$masterTable.jtable({ title: app.localize('PharmacyInventory'), openChildAsAccord ...

  8. jtable更新数据

    static JTable table; public void refrushTableData() { String[] columnNames = { " }; String[][] ...

  9. 实现Java JTable的应用案例

    代码如下 import Java.awt.Component; import java.awt.Dimension; import java.awt.FontMetrics; import javax ...

  10. JavaSE GUI显示列表 JTable的刷新 重新加载新的数据

    JTable在显示所有数据之后,假如需要搜索某个名字,则会获取新的列表数据. 假设datas是JTable的数据,定义为: private Vector<Vector> datas = n ...

随机推荐

  1. iOS跳转到Touch ID设置界面

    1.首先去info.plist 设置: 2.代码 NSURL *url = [NSURL URLWithString:@"App-Prefs:root=TOUCHID_PASSCODE&qu ...

  2. Oracle中用触发器实现自动记录表数据被修改的历史信息

    oracle中用触发器实现自动记录表数据被修改的历史信息. 有一些比较重要的表字段每次修改需要做历史记录,以后可以查询这个表中某些字段如何被修改过.由什么改成了什么等,由谁操作,操作时间等. 实例:1 ...

  3. ElasticSearch(六) Elasticsearch在Thinkphp5.0中的使用

    首先下载需要引入的类库 链接:https://pan.baidu.com/s/1XEXviLoWM-ypwJ_B0jXqlg 密码:u54t //Elasticsearch.zip类库压缩包地址 然后 ...

  4. GridView自定义自增长的 序号 列

    如图所示,添加一个普通列(非模板列),将其显示文本为    序号 在GridView的RowDataBound事件中作如下处理 后台.CS 代码:

  5. 20145303 《Java程序设计》第7周学习总结

    20145303 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量 格林威治标准时间(GMT),现已不作为标准时间使用,即使标注为GMT(格林威治时间),实际上谈到的的是U ...

  6. Ubuntu12.04 安装adb

    1.通过apt-get安装adb sudo add-apt-repository ppa:nilarimogard/webupd8 sudo apt-get update sudo apt-get i ...

  7. Jquery5 基础 DOM 和 CSS 操作

    学习要点: 1.DOM 简介 2.设置元素及内容 3.元素属性操作 4.元素样式操作 5.CSS 方法 DOM 是一种文档对象模型.方便开发者对HTML 结构元素内容进行展示和修改.在 JavaScr ...

  8. ImportError: No module named Crypto.PublicKey

    答: sudo apt-get install python-pip  (如果没有安装pip的话,需要这一操作) pip install pycrypto

  9. HikariPool-1 - Exception during pool initialization.

    java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required 这是由于springboot自带 mysql-c ...

  10. js去除前后空格

    <script language="javascript"> String.prototype.trim=function(){     return this.rep ...