最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS實(shí)現(xiàn)的表格操作類詳解(添加,刪除,排序,上移,下移)

 更新時間:2015年12月22日 12:01:58   作者:Autumoon  
這篇文章主要介紹了JS實(shí)現(xiàn)的表格操作類,可實(shí)現(xiàn)針對表格的添加,刪除,排序,上移,下移等操作,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了JS實(shí)現(xiàn)的表格操作類。分享給大家供大家參考,具體如下:

運(yùn)行效果截圖如下:

點(diǎn)擊此處查看在線演示。

具體代碼如下:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<style type="text/css">*{font-size:14px}button{margin:3px}</style> 
<script type="text/javascript"> 
var mytable=null,mytable2=null; 
window.onload=function(){ 
mytable=new CTable("tbl",10); 
mytable2=new CTable("tbl2",6); 
} 
Array.prototype.each=function(f){for(var i=0;i<this.length;i++) f(this[i],i,this)} 
function $A(arrayLike){ 
for(var i=0,ret=[];i<arrayLike.length;i++) ret.push(arrayLike[i]); 
return ret 
} 
Function.prototype.bind = function() { 
 var __method = this, args = $A(arguments), object = args.shift(); 
 return function() { 
  return __method.apply(object, args.concat($A(arguments))); 
 } 
} 
function CTable(id,rows){ 
this.tbl=typeof(id)=="string"?document.getElementById(id):id; 
if (rows && /^\d+$/.test(rows)) this.addrows(rows) 
} 
CTable.prototype={ 
addrows:function(n){ //隨機(jī)添加n個tr 
new Array(n).each(this.add.bind(this)) 
}, 
add:function(){ //添加1個tr 
var self=this; 
var tr = self.tbl.insertRow(-1),td1= tr.insertCell(-1),td2= tr.insertCell(-1),td3= tr.insertCell(-1); 
var chkbox=document.createElement("INPUT") 
chkbox.type="checkbox" 
chkbox.onclick=self.highlight.bind(self) 
td1.appendChild(chkbox) 
td1.setAttribute("width","35") 
td2.innerHTML=Math.ceil(Math.random()*99) 
td3.innerHTML=Math.ceil(Math.random()*99) 
}, 
del:function(){ //刪除所選tr 
var self=this 
$A(self.tbl.rows).each(function(tr){if (self.getChkBox(tr).checked) tr.parentNode.removeChild(tr)}) 
}, 
up:function(){ //上移所選tr 
var self=this 
var upOne=function(tr){ //上移1個tr 
if (tr.rowIndex>0){ 
self.swapTr(tr,self.tbl.rows[tr.rowIndex-1]) 
self.getChkBox(tr).checked=true 
} 
} 
var arr=$A(self.tbl.rows).reverse() 
if (arr.length>0 && self.getChkBox(arr[arr.length-1]).checked){ 
for(var i=arr.length-1;i>=0;i--){ 
if (self.getChkBox(arr[i]).checked){ 
arr.pop()      
}else{ 
break 
} 
} 
} 
arr.reverse().each(function(tr){if (self.getChkBox(tr).checked) upOne(tr)}); 
}, 
down:function(){ 
var self=this 
var downOne=function(tr){    
if (tr.rowIndex<self.tbl.rows.length-1) { 
self.swapTr(tr,self.tbl.rows[tr.rowIndex+1]); 
self.getChkBox(tr).checked=true; 
} 
} 
var arr=$A(self.tbl.rows) 
if (arr.length>0 && self.getChkBox(arr[arr.length-1]).checked){ 
for(var i=arr.length-1;i>=0;i--){ 
if (self.getChkBox(arr[i]).checked){ 
arr.pop() 
}else{ 
break 
} 
} 
} 
arr.reverse().each(function(tr){if (self.getChkBox(tr).checked) downOne(tr)}); 
}, 
sort:function(){ //排序  
var self=this,order=arguments[0]; 
var sortBy=function(a,b){ 
if (typeof(order)=="number"){ //數(shù)字,則按數(shù)字指示的列排序 
return Number(a.cells[order].innerHTML)>=Number(b.cells[order].innerHTML)?1:-1;  //轉(zhuǎn)化為數(shù)字類型比較大小 
}else if (typeof(order)=="function"){ //為程序,按 程序的返回結(jié)果排序 
return order(a,b); 
}else{ 
return 1; 
} 
} 
$A(self.tbl.rows).sort(sortBy).each(function(x){ 
var checkStatus=self.getChkBox(x).checked; 
self.tbl.firstChild.appendChild(x); 
if (checkStatus) self.getChkBox(x).checked=checkStatus; 
}); 
}, 
rnd:function(){ //隨即選擇幾行tr 
var self=this,selmax=0,tbl=self.tbl; 
if (tbl.rows.length){ 
 selmax=Math.max(Math.ceil(tbl.rows.length/4),1); //選擇的行數(shù)不超過tr數(shù)的1/4 
 $A(tbl.rows).each(function(x){ 
self.getChkBox(x).checked=false; 
self.restoreBgColor(x) 
}) 
}else{ 
return alert("無數(shù)據(jù)可以選") 
} 
new Array(selmax).each(function(){ 
var tr=tbl.rows[Math.floor(Math.random()*tbl.rows.length)] 
self.getChkBox(tr).checked=true; 
self.highlight({target:self.getChkBox(tr)}) 
}) 
}, 
highlight:function(){        //設(shè)置tr的背景色 
var self=this; 
var evt=arguments[0] || window.event 
var chkbox=evt.srcElement || evt.target 
var tr=chkbox.parentNode.parentNode 
chkbox.checked?self.setBgColor(tr):self.restoreBgColor(tr) 
}, 
swapTr:function(tr1,tr2){       //交換tr1和tr2的位置 
var target=(tr1.rowIndex<tr2.rowIndex)?tr2.nextSibling:tr2; 
var tBody=tr1.parentNode 
tBody.replaceChild(tr2,tr1); 
  tBody.insertBefore(tr1,target); 
}, 
getChkBox:function(tr){      //從tr得到 checkbox對象 
return tr.cells[0].firstChild 
}, 
restoreBgColor:function(tr){      
tr.style.backgroundColor="#ffffff" 
}, 
setBgColor:function(tr){ 
tr.style.backgroundColor="#c0c0c0" 
} 
} 
function f(a,b){ 
var sumRow=function(row){return Number(row.cells[1].innerHTML)+Number(row.cells[2].innerHTML)}; 
return sumRow(a)>sumRow(b)?1:-1; 
} 
</script> 
</head> 
<body> 
<button onClick="javascript:mytable.rnd()">隨機(jī)選擇行</button> 
<button onClick="javascript:mytable.add()">添加一行</button> 
<button onClick="javascript:mytable.del()">刪除選定行</button> 
<button onClick="javascript:mytable.up()">上移選定行</button> 
<button onClick="javascript:mytable.down()">下移選定行</button> 
<button onClick="javascript:mytable.sort(1)">按第一列數(shù)字排序</button> 
<button onClick="javascript:mytable.sort(f)">按每行數(shù)據(jù)的和排序</button> 
<table width=100%> 
<tr> 
<td valign="top"><table border id="tbl" width="80%"></table></td> 
<td valign="top"><table border id="tbl2" width="80%"></table></td> 
</tr> 
</table> 
<button onClick="javascript:mytable2.rnd()">隨機(jī)選擇行</button> 
<button onClick="javascript:mytable2.add()">添加一行</button> 
<button onClick="javascript:mytable2.del()">刪除選定行</button> 
<button onClick="javascript:mytable2.up()">上移選定行</button> 
<button onClick="javascript:mytable2.down()">下移選定行</button> 
<button onClick="javascript:mytable2.sort(2)">按第二列數(shù)字排序</button> 
<button onClick="javascript:mytable2.sort(f)">按每行數(shù)據(jù)的和排序</button> 
</body> 
</html>

希望本文所述對大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • JS庫之ParticlesJS使用簡介

    JS庫之ParticlesJS使用簡介

    ParticlesJS是一個輕量級的創(chuàng)建粒子背景的 JavaScript 庫,接下來通過本文給大家分享JS庫之ParticlesJS使用簡介,感興趣的朋友一起看看吧
    2017-09-09
  • dtree 網(wǎng)頁樹狀菜單及傳遞對象集合到j(luò)s內(nèi),動態(tài)生成節(jié)點(diǎn)

    dtree 網(wǎng)頁樹狀菜單及傳遞對象集合到j(luò)s內(nèi),動態(tài)生成節(jié)點(diǎn)

    最近要做一個聯(lián)系人的選擇框,選擇聯(lián)系人后,將聯(lián)系人的手機(jī)號添加到網(wǎng)頁的輸入框,可以支持復(fù)選框
    2012-04-04
  • js控制的遮罩層實(shí)例介紹

    js控制的遮罩層實(shí)例介紹

    把項(xiàng)目里很土的彈窗,改成了遮罩層顯示,現(xiàn)在感覺好多了。在這里創(chuàng)建一個div和body一樣大小,這樣就可以把整個頁面全部蓋住了,具體實(shí)現(xiàn)祥看本文,希望可以幫助到你
    2013-05-05
  • javaScript合并對象的多種方式及知識擴(kuò)展

    javaScript合并對象的多種方式及知識擴(kuò)展

    眾所周知JavaScript中有多種方法可以合并對象,下面這篇文章主要給大家介紹了關(guān)于javaScript合并對象的多種方式及知識擴(kuò)展,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • JavaScript數(shù)組every方法的應(yīng)用場景實(shí)例

    JavaScript數(shù)組every方法的應(yīng)用場景實(shí)例

    every方法確定數(shù)組中的每一項(xiàng)的結(jié)果都滿足所寫的條件的時候,就會返回true,否則返回false,這篇文章主要給大家介紹了關(guān)于JavaScript數(shù)組every方法應(yīng)用場景的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • javascript 折半查找字符在數(shù)組中的位置(有序列表)

    javascript 折半查找字符在數(shù)組中的位置(有序列表)

    折半查找字符在數(shù)組中的位置(有序列表),需要的朋友可以參考下。
    2010-12-12
  • JS阻止事件冒泡的方法詳解

    JS阻止事件冒泡的方法詳解

    在本篇文章里小編給大家整理的是關(guān)于JS如何阻止事件冒泡的相關(guān)知識點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • JavaScript詞法作用域與調(diào)用對象深入理解

    JavaScript詞法作用域與調(diào)用對象深入理解

    關(guān)于 Javascript 的函數(shù)作用域、調(diào)用對象和閉包之間的關(guān)系很微妙,關(guān)于它們的文章已經(jīng)有很多,本文做了一些總結(jié),需要的朋友可以參考下
    2012-11-11
  • document.forms[].submit()使用介紹

    document.forms[].submit()使用介紹

    這篇文章主要介紹了document.forms[].submit()使用,需要的朋友可以參考下
    2014-02-02
  • Javascript中Promise的四種常用方法總結(jié)

    Javascript中Promise的四種常用方法總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于Javascript中Promise的四種常用方法,分別是處理異步回調(diào)、多個異步函數(shù)同步處理、異步依賴異步回調(diào)和封裝統(tǒng)一的入口辦法或者錯誤處理,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07

最新評論

富顺县| 拜泉县| 西平县| 高州市| 遵义市| 海林市| 南木林县| 高邑县| 高台县| 和政县| 大田县| 汾阳市| 界首市| 桐乡市| 新平| 那曲县| 周口市| 沙雅县| 茌平县| 石台县| 东安县| 伊金霍洛旗| 大兴区| 鄢陵县| 闽清县| 中牟县| 乐都县| 湖南省| 巴林左旗| 双辽市| 邹城市| 北辰区| 禹州市| 崇信县| 池州市| 巴南区| 新和县| 安福县| 潮安县| 宁夏| 鲁甸县|