狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

原生js-自定義組件table

admin
2023年11月26日 21:51 本文熱度 593

使用方法:

// 渲染table

msCtools.tableDom.common({

        columns:columns1 ,

        dataSource:dataSource1,

        width:'100%',

        ischeck:true,

},'tableDOM');

參數(shù)說明:

參數(shù)

說明

類型

可選值

columns

table表格列內(nèi)容設(shè)置

options

Key、title、align、width

dataSource

table數(shù)據(jù)

array

——

width

控制表格寬度

String

默認(rèn)寬800px

ischeck

true/false是否全選

Boolean

默認(rèn)false

tableid

掛載元素的ID

String

必填

columns與dataSource中的數(shù)據(jù)相對應(yīng),沒有對應(yīng)數(shù)據(jù)的地方顯示為空;

columns表格列內(nèi)容設(shè)置,數(shù)組格式:(參數(shù)說明如下)

參數(shù)

說明

類型

可選值

key

字段名

String

必填

title

表頭名

String

必填

align

對齊方式

String

選填

width

列寬度

String

選填

textOver

超出行溢出

Number

選填

ishidden

是否隱藏(true:是,false:否)

Boolean

默認(rèn)false

render

函數(shù)方法

Function

選填

columns中的render函數(shù)方法,可對當(dāng)前數(shù)據(jù)進(jìn)行處理后顯示,也可設(shè)置為數(shù)據(jù)操作(編輯、查看、刪除);

獲取勾選數(shù)據(jù)方法:

msCtools.tableDom.getchecked(tableid);

源碼:

1.  var msCtools = {

2.       conf: {

3.        host: ""

4.        port: "80",

5.        baseapi: "/api/",

6.        basepath: "mhc/",

7.       },

8.       Table:{

9.        init:function(param,id){

10.          var options = {

11.             columns: [], // 表格列內(nèi)容設(shè)置(key:字段名,title:表頭名,align:對齊方式,width:列寬度,textOver:超出行溢出,ishidden:是否隱藏(true:是,false:)默認(rèn)false

12.             dataSource: [], // 數(shù)據(jù)

13.             width: '100%', // 寬度,默認(rèn)100%

14.             ischeck:false, // 是否勾選(true:是,false:),默認(rèn)false

15.             style:{

16.                 skin:'', // 邊框樣式:line/row/none

17.                 even:false, // 是否開啟隔行背景(true:是,false:),默認(rèn)false

18.                 evenColor:['#fff','#EEF0F2'], // 隔行背景顏色設(shè)置

19.             },

20.             colClassName:'',

21.          }

22.          if (param && {}.toString.call(param) === '[object Object]') {

23.             for (let attr in param) {

24.                options[attr] = param[attr]

25.             }

26.          }

27.          // 參數(shù)格式校驗(yàn):columns必須為數(shù)組且key不重復(fù),dataSource必須為數(shù)組

28.          if(!Array.isArray(options.columns)) {

29.             console.log('錯誤:傳入columns必須為數(shù)組');

30.          } else {

31.             for(let i = 0; i < options.columns.length; i++) {

32.                 for(let j = i + 1; j < options.columns.length; j++) {

33.                    if(!options.columns[i].key) {

34.                        console.log('key不存在')

35.                        break;

36.                    } else {

37.                        if(options.columns[i].key === options.columns[j].key) {

38.                           console.log('key重復(fù)')

39.                           break;

40.                        }

41.                    }

42.                 }

43.             }

44.          }

45.          if(!Array.isArray(options.dataSource)) {

46.             console.log('錯誤:傳入dataSource必須為數(shù)組');

47.          }

48.          if(options.style === null || typeof options.style !== "object") {

49.             console.log('錯誤:style參數(shù)必須為對象');

50.          }

51.          if(options === null || typeof options !== "object") {

52.             console.log('錯誤:參數(shù)必須為對象');

53.          }

54.          // 賦值

55.          this.cols = options.columns;

56.          this.data = options.dataSource;

57.          this.width = options.width;

58.          this.ischeck = options.ischeck;

59.          this.style = options.style;

60.          this.colClassName = options.colClassName;

61.          this.id = id;

62.          this.content = document.getElementById(id);

63.          // 創(chuàng)建dom節(jié)點(diǎn)

64.          this.creatDom();

65.      },

66.      // 創(chuàng)建節(jié)點(diǎn)

67.      creatDom:function(){

68.          var table = document.createElement('table');

69.             table.className = 'table_style';

70.          // 表格邊框的寬度

71.          table.setAttribute('border','0');

72.          // 單元格之間的空白

73.          table.setAttribute('cellspacing','0');

74.          // 單元邊沿與其內(nèi)容之間的空白

75.          table.setAttribute('cellpadding','10px');

76.         

77.          // table邊框樣式:line/row/none

78.          if(this.style.skin == 'line'){

79.             // 外側(cè)邊框的哪個部分是可見的

80.             table.setAttribute('frame','box');

81.             // 內(nèi)側(cè)邊框的哪個部分是可見的

82.             table.setAttribute('rules','all');

83.          }else if(this.style.skin == 'row'){

84.             // 外側(cè)邊框的哪個部分是可見的

85.             table.setAttribute('frame','box');

86.             // 內(nèi)側(cè)邊框的哪個部分是可見的

87.             table.setAttribute('rules','rows');

88.          }else if(this.style.skin == 'none'){

89.             // 無邊框

90.          }

91.         

92.          // 設(shè)置寬

93.          table.setAttribute('width',this.width);

94.         

95.          var thead = this.creatThead();

96.          var tbody = this.creatTbody();

97.          table.appendChild(thead);

98.          table.appendChild(tbody);

99.          this.content.appendChild(table);

100.            },

101.            // 創(chuàng)建thead

102.            creatThead:function(){

103.               var thead = document.createElement('thead');

104.               var tr = document.createElement('tr');

105.                   tr.className = 'table_cols';

106.                   tr.classList.add(this.colClassName);

107.               // 是否勾選ischeck( true / false )

108.               if(this.ischeck){

109.                   var th = document.createElement('th');

110.                      th.id = 'ischeck_th';

111.                      th.className = 'ischeck_inp'

112.                   var input = document.createElement('input');

113.                      input.type = 'checkbox';

114.                      input.setAttribute('style','vertical-align: middle;');

115.                      var content = this.content;

116.                      input.onchange = function(e){

117.                          if(e.target.checked){

118.                             // 選中全選

119.                             console.log('觸發(fā)選中全選');

120.                             msCtools.Table.allCheck(content,true);

121.                          }else{

122.                             // 取消全選

123.                             console.log('觸發(fā)取消全選');

124.                             msCtools.Table.allCheck(content,false);

125.                          }

126.                      }

127.                   var span = document.createElement('span');

128.                      span.id = 'ischeck_title';

129.                      span.innerText = '全選';

130.                   th.appendChild(input);

131.                   th.appendChild(span);

132.                   tr.appendChild(th);

133.               }

134.               var lenn = this.cols.length;

135.               for(var i=0;i<lenn;i++){

136.                   // 非隱藏

137.                   if( !this.cols[i].ishidden){

138.                      var th = document.createElement('th');

139.                          th.innerText = this.cols[i].title;

140.                      tr.appendChild(th);

141.                   }

142.               }

143.               thead.appendChild(tr);

144.               return thead;

145.            },

146.            // 創(chuàng)建tbody

147.            creatTbody:function(){

148.               var tbody = document.createElement('tbody');

149.               var lenn = this.data.length;

150.               for(var i=0;i<lenn;i++){

151.                   var tr = document.createElement('tr');

152.                   // 是否開啟隔行背景

153.                   if(this.style.even){

154.                      if(this.style.evenColor){

155.                          if(this.style.evenColor.length > 1){

156.                             var result = i % 2 == 0 ? this.style.evenColor[0] : this.style.evenColor[1];

157.                          }else{

158.                             var result = i % 2 == 0 ? '#ffffff' : '#e4e0e0';

159.                          }

160.                      }else{

161.                          var result = i % 2 == 0 ? '#ffffff' : '#e4e0e0';

162.                      }

163.                      tr.setAttribute('style','background-color:'+result)

164.                   }

165.                   // 是否勾選ischeck

166.                   if(this.ischeck){

167.                      var td = document.createElement('td');

168.                          td.className = 'ischeck_inp'

169.                      var input = document.createElement('input');

170.                          input.type = 'checkbox';

171.                          input.setAttribute('style','vertical-align: middle;');

172.                          input.setAttribute('set-data',this.data[i].id);

173.                          // var set_data1 = JSON.stringify(this.data[i]);

174.                          // input.setAttribute('set-data1',set_data1);

175.                          input.onchange = function(e){

176.                             if(e.target.checked){

177.                                 // console.log('觸發(fā)選中')

178.                             }else{

179.                                 // console.log('觸發(fā)取消')

180.                             }

181.                          }

182.                      td.appendChild(input);

183.                      tr.appendChild(td);

184.                   }

185.                   var lenn_cols = this.cols.length;

186.                   for(var f=0;f<lenn_cols;f++){

187.                      // 非隱藏

188.                      if( !this.cols[f].ishidden){

189.                          var td = document.createElement('td');

190.                          var span = document.createElement('span');

191.                          if(this.cols[f].render && typeof this.cols[f].render === 'function'){

192.                             // 執(zhí)行render函數(shù),傳入行值和列值,并且獲得返回值

193.                             let render = this.cols[f].render(this.data[i][this.cols[f].key], this.data[i]);

194.                             // 如果返回值是一個dom節(jié)點(diǎn),則向td里插入節(jié)點(diǎn)

195.                             if(typeof render === "object") {

196.                                 td.classList.add('toolBtn')

197.                                 td.appendChild(render);

198.                             } else {

199.                                 // 否則直接innerHTML

200.                                 span.innerHTML = render;

201.                             }

202.                          }else{

203.                             // 直接插入對應(yīng)值

204.                             span.innerText = this.data[i][this.cols[f].key];

205.                          }

206.                          var td_style = '';

207.                          // 設(shè)置對齊方式

208.                          if(this.cols[f].align){

209.                             td_style += 'text-align:'+this.cols[f].align+';';

210.                          }

211.                          // 設(shè)置列寬

212.                          if(this.cols[f].width){

213.                             td_style += 'width:'+this.cols[f].width+';';

214.                          }

215.                          // 設(shè)置滿行溢出

216.                          var textOver = 1;

217.                          if(this.cols[f].textOver){

218.                             textOver = this.cols[f].textOver;

219.                          }

220.                          span.setAttribute('style','overflow : hidden; text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: '+textOver+'; -webkit-box-orient: vertical;')

221.                          td.setAttribute('style',td_style);

222.                          td.appendChild(span);   

223.                          tr.appendChild(td); 

224.                      }

225.                   }

226.                   tbody.appendChild(tr);

227.               }

228.               return tbody;

229.            },

230.            // 數(shù)據(jù)操作

231.            tools:function(arry,data,cb){

232.               let func = function(){};

233.               if (cb && {}.toString.call(cb) === '[object Function]') {

234.                   func = cb

235.               }

236.               var lenn = arry.length;

237.               var btns = document.createElement('div');

238.                   btns.classList.add('tooldivBtn');

239.               for(var i=0;i<lenn;i++){

240.                   // 事件類型:type,文字:text,樣式:classname

241.                   let element = document.createElement('a');

242.                   element.innerHTML = arry[i].text;

243.                   element.type = arry[i].type;

244.                   element.className = arry[i].classname;

245.                   var type = arry[i].type;

246.                   element.onclick = function(e){

247.                      // 回調(diào)函數(shù):data點(diǎn)擊行數(shù)據(jù),type點(diǎn)擊事件的執(zhí)行類型:刪除、修改....

248.                      func(data,e.target.type)

249.                   }

250.                   btns.appendChild(element)

251.               }

252.               return btns;

253.            },

254.            // 獲取選中數(shù)據(jù)

255.            getchecked:function(id){

256.               var content = document.getElementById(id);

257.               var table = content.queryselector('table');

258.               var tbody = table.queryselector('tbody');

259.               var node_checks = tbody.queryselectorAll('.ischeck_inp');

260.               var data = [];

261.               for(var i=0;i<node_checks.length;i++){

262.                   var item = node_checks[i];

263.                   var input = item.queryselector('input[type="checkbox"]');

264.                   if(input.checked){

265.                      // var itm = input.getAttribute('set-data1');

266.                      //  itm = JSON.parse(itm);

267.                      var itm = input.getAttribute('set-data');

268.                      data.push(itm);

269.                   }

270.               }

271.               return data

272.            },

273.            // 全選/取消

274.            allCheck:function(content,ischeck){

275.               var table = content.queryselector('table');

276.               var tbody = table.queryselector('tbody');

277.               var node_checks = tbody.queryselectorAll('.ischeck_inp');

278.               for(var i=0;i<node_checks.length;i++){

279.                   var item = node_checks[i];

280.                   var input = item.queryselector('input[type="checkbox"]');

281.                      input.checked = ischeck;

282.               }

283.            }

284.       },

285.       }

 

css樣式:

1.  /* table 默認(rèn)樣式 */

2.  .table_style{border-color: #e4e0e0;padding: 0;margin: 0;}

3.  .table_style tbody td{color: #666666;font-size: 14px;}

4.  .table_cols{background-color:#EEF0F2;color: #333;text-align: center;line-height: 40px;}

5.  .table_cols th{padding: 0 15px;font-size: 14px;color: #333;font-weight: normal;}

6.  .ischeck_inp{padding-left: 15px;min-width: 50px;}

7.  .table_style .toolBtn a{padding: 3px 10px;border: 1px solid #999;border-radius: 4px;margin-right: 10px;cursor: pointer;}

 

使用實(shí)例:html

1.  <!DOCTYPE html>

2.  <html>

3.       <head>

4.        <meta charset="utf-8">

5.        <title>測試實(shí)例</title>

6.        <style type="text/css">

7.            /* table 自定義 */

8.            .zdy_cols{

9.               background-color:#01AAED;

10.             color: #fff;

11.             text-align: center;

12.             line-height: 60px;

13.          }

14.          .zdy_cols th{padding: 0 25px;font-size: 14px;font-weight: normal;}

15.      </style>

16.      <script src="msCtools.js"></script>

17.     </head>

18.     <body>

19.      <div id="ctools_table"></div>

20.      <button onclick="getdata()">獲取數(shù)據(jù)</button>

21.     </body>

22.     <script>

23.     var data = [

24.          {id:'001', name:'還是等會計(jì)法恒生科技粉紅色快遞費(fèi)數(shù)據(jù)庫',age:12,job:'盡快盡快'},

25.          {id:'002', name:'lili',age:12,job:'鼎折覆餗老看到集福卡了束帶結(jié)發(fā)SDK福建省看到了附加速度快的說法可接受的開發(fā)收到了的看法是打開房間塞德里克肯德基首付款'},

26.          {id:'003', name:'lili',age:12,job:'盡快盡快'}

27.     ]

28.     msCtools.Table.init({

29.      columns:[

30.          {key: 'id',title: 'id', align: 'center',width:'60px'},

31.          {key: 'name',title: '姓名', align: 'center',width:'60px'},

32.          {key: 'age',title: '年齡',align: 'center',width:'60px'},

33.          {key: 'job',title: '工作',align: 'center',

34.                 render:function (text, data){

35.                    return '<span style="color:green;">'+text+'</span>'

36.                 }

37.          },

38.          {key: 'tools',title: '操作',align: 'center',width:'200px',

39.                 render:function (text, data){

40.                    return msCtools.Table.tools([{

41.                           type:'del',

42.                           text:'刪除',

43.                           classname:' toolBtn delBtn'

44.                        },{

45.                           type:'edit',

46.                           text:'修改',

47.                           classname:'toolBtn editBtn'

48.                        },{

49.                           type:'look',

50.                           text:'查看',

51.                           classname:'toolBtn lookBtn'

52.                        }],data,function(e,type){

53.                           // e:點(diǎn)擊行數(shù)據(jù)

54.                           // type:點(diǎn)擊事件執(zhí)行類型--刪除、修改、查看

55.                           if(type == 'del'){

56.                               console.log('刪除數(shù)據(jù):')

57.                               console.log(e)

58.                           }else if(type == 'edit'){

59.                               console.log('修改數(shù)據(jù):')

60.                               console.log(e)

61.                           }else if(type == 'look'){

62.                               console.log('查看數(shù)據(jù):')

63.                               console.log(e)

64.                           }

65.                        })

66.                 }

67.          },

68.      ],

69.      dataSource:data,

70.      width:'800px', // 寬度

71.      ischeck:true, // 是否勾選

72.        colClassName:'zdy_cols'

73.     },'ctools_table');

74.     

75.     function getdata(){

76.      var data = msCtools.Table.getchecked('ctools_table');

77.      console.log(data);

78.     }

79.     </script>

80.</html>


該文章在 2023/11/26 21:51:33 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved