站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Javascript 专题COOL而实用的动态效果

COOL而实用的动态效果

摘要: COOL而实用的动态效果
<tr> <td>

最近在做项目的时候,客户要求表格里的数据可以拖选,于是用JS写了个下面的方法。支持IE、FIREFOX等浏览器。实现对整行、整列数据的选取,全选、反选、清除,在数据表格内拖拉出的矩形范围的单元格数据全选。

PS:

1.如果数据单元格没有数据,请将ID设为空或去掉ID,样式为"inactive".则选择时会跳过此单元格。

2.如果不想某个单元格被选,请将class设为“bg_green”,则选择时会跳过此单元格。

运行代码框

<textarea class=fm cols=78 id=code rows=12> HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <head> calendar <script language="javascript" type="text/javascript" src="array.js"></script> </head> <body> <script type="text/javascript" language="javascript"> /****************************************************************** 此代码为FLYINGFISH原创,你可以免费使用,修改完善。但作为对作者和对你自己的尊重,务必保留此原始版权信息, DESIGNED BY: flyingfish WEB SITE: www.yu5911.cn EMAIL:penglongxiang@gmail.com QQ: 55856710 ******************************************************************/ Array.prototype.remove = function(index){ if(isNaN(index)||(index>=this.length)||(index<0)) return false; this.splice(index,1); return true; } Array.prototype.del=function(n) { //n表示第几项,从0开始算起。 //prototype为对象原型,注意这里为对象增加自定义方法的方法。 if(n<0) //如果n<0,则不进行任何操作。 return this; else return this.slice(0,n).concat(this.slice(n+1,this.length)); /* concat方法:返回一个新数组,这个新数组是由两个或更多数组组合而成的。       这里就是返回this.slice(0,n)/this.slice(n+1,this.length)       组成的新数组,这中间,刚好少了第n项。 slice方法: 返回一个数组的一段,两个参数,分别指定开始和结束的位置。 */ } Array.prototype.indexOf = function(value){ for(var i=0;i<this.length;i++){ if(typeof(value.equals)=="function"){ if(value.equals(this[i])) return i; }else if(value==this[i]) return i; } return -1; } Array.prototype.contains = function(value){ return this.indexOf(value)>=0; } Array.prototype.clear = function(){ while(this.length>0) this.remove(this.length-1); } Array.prototype.add = function(index,value){ if(value==undefined) this.put(index); else{ var len = this.length; this.push(this[len-1]); for(var i=len-1;i>index;i--) this[i] = this[i-1]; this[index] = value; } } Array.prototype.put = function(value){ if(!this.contains(value)) this.push(value); } Array.prototype.circle = function(degressive){ if(degressive){ var a = this[0]; for(var i=0;i<this.length-1;i++) this[i] = this[i+1]; this[this.length-1] = a; }else{ var a = this[this.length-1]; for(var i=this.length-1;i>0;i--) this[i] = this[i-1]; this[0] = a; } } var selectedID = new Array() var months,days,temp_m,temp_d,temp_m1,temp_d1,isSelected=false,datedata=""; //document.write('<table id="ca" onselectstart="return false" border="0" cellpadding="0" cellspacing="0">') for(t=1;t<13;t++){ datedata =datedata + '<tr>' for(i=1;i<=42;i++){ datedata =datedata +'<td width="20" height="25" id="m'+t+'d'+i+'" name="m'+t+'d'+i+'" class="inactive" >'+i+'</td>' } datedata =datedata +'</tr>' } datedata = '<table id="ca" onselectstart="return false" border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" >'+datedata+"</table>" //document.write('</table>') function selectDate(startM,endM,startD,endD){ for(m = startM;m<=endM;m++){ for(d = startD;d<=endD;d++){ tid=document.getElementById("m"+m+"d"+d) if(tid!=null){ if(tid.className!="bg_green"){ if(selectedID.indexOf("m"+m+"d"+d)!=-1){ did =selectedID.indexOf("m"+m+"d"+d) selectedID.remove(did) tid.className="inactive" }else{ selectedID.put("m"+m+"d"+d) tid.className="bg_red" } } } } } document.getElementById("report").innerHTML="共选中"+selectedID.length+"个数据"+selectedID; } function selectAll(v){ if(v){ resetAll(); selectDate(1,months,1,days) }else{ selectDate(1,months,1,days) } } function resetAll(){ if(selectedID.length>0){ for(k=1;k<=selectedID.length;k++){ did=document.getElementById(selectedID[k-1]) did.className="inactive"; } selectedID.clear(); document.getElementById("report").innerHTML="共选中"+selectedID.length+"个数据"+selectedID; } } function selectMonth(month){ month = month.parentNode.rowIndex+1 selectDate(month,month,1,days) } function selectDay(day){ day = day.cellIndex + 1; selectDate(1,months,day,day) } window.onload=function () { dayObj = document.getElementById("days"); monthObj = document.getElementById("months") days = dayObj.rows[0].cells.length //get days months = monthObj.rows.length // get Months var obj=document.getElementById("dataTable"); var eventObj; //creatDateData document.getElementById("dataTable").innerHTML=datedata //document.body.innerText=document.body.innerHTML obj.onmousedown=function(event) { if(event == null){ event = window.event; // For IE } var eventObj = event.srcElement? event.srcElement : event.target; // IE use srcElement, Firefox use target if(eventObj.tagName=="td"||eventObj.tagName=="TD") { xy=eventObj.getAttribute("name").split("d"); temp_d=parseInt(xy[1]) temp_m=parseInt(xy[0].split("m")[1]) selectDate(temp_m,temp_m,temp_d,temp_d) } } obj.onmouseup=function(event) { if(event == null){ event = window.event; // For IE } var eventObj = event.srcElement? event.srcElement : event.target; // IE use srcElement, Firefox use target if(eventObj.tagName=="td"||eventObj.tagName=="TD") { xy=eventObj.getAttribute("name").split("d"); temp_d1=parseInt(xy[1]) temp_m1=parseInt(xy[0].split("m")[1]) sM=temp_m </td> </tr> <tr bgcolor="#0099CC"> <td height="25"> </td> <td height="25" align="left" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0" class="daysTitle" id="days"> <tr align="center" valign="middle"> <td width="20" height="25">M</td> <td width="20" height="25">T</td> <td width="20" height="25">W</td> <td width="20" height="25">T</td> <td width="20" height="25">F</td> <td width="20" height="25" class="font_red" >S</td> <td width="20" height="25" class="font_red" >S</td> <td width="20" height="25">M</td> <td width="20" height="25">T</td> <td width="20" height="25">W</td> <td width="20" height="25">T</td> <td width="20" height="25">F</td> <td width="20" height="25" class="font_red" >S</td> <td width="20" height="25" class="font_red" >S</td> <td width="20" height="25">M</td> <td width="20" height="25">T</td> <td width="20" height="25">W</td> <td width="20" height="25">T</td> <td width="20" height="25">F</td> <td width="20" height="25" class="font_red" >S</td> <td width="20" height="25" class="font_red" >S</td> <td width="20" height="25">M</td> <td width="20" height="25">T</td> <td width="20" height="25">W</td> <td width="20" height="25">T</td> <td width="20" height="25">F</td> <td width="20" height="25" class="font_red" >S</td> <td width="20" height="25" class="font_red" >S</td> <td width="20" height="25">M</td> <td width="20" height="25">T</td> <td width="20" height="25">W</td> <td width="20" height="25">T</td> <td width="20" height="25">F</td> <td width="20" height="25" class="font_red" >S</td> <td width="20" height="25" class="font_red" >S</td> <td width="20" height="25">M</td> <td width="20" height="25">T</td> <td width="20" height="25">W</td> <td width="20" height="25">T</td> <td width="20" height="25">F</td> <td width="20" height="25" class="font_red" >S</td> <td width="20" height="25" class="font_red" >S</td> </tr> </table> </td> </tr> <tr> <td width="60" align="left" valign="top" bgcolor="#0099CC"> <table width="100%" border="0" cellpadding="0" cellspacing="0" id="months" class="monthsTitle"> <tr> <td height="25" align="center" valign="middle">Jan</td> </tr> <tr> <td height="25" align="center" valign="middle">Feb</td> </tr> <tr> <td height="25" align="center" valign="middle">Mar</td> </tr> <tr> <td height="25" align="center" valign="middle">Apr</td> </tr> <tr> <td height="25" align="center" valign="middle">May</td> </tr> <tr> <td height="25" align="center" valign="middle">Jun</td> </tr> <tr> <td height="25" align="center" valign="middle">Jul</td> </tr> <tr> <td height="25" align="center" valign="middle">Aug</td> </tr> <tr> <td height="25" align="center" valign="middle">Sep</td> </tr> <tr> <td height="25" align="center" valign="middle">Oct</td> </tr> <tr> <td height="25" align="center" valign="middle">Nov</td> </tr> <tr> <td height="25" align="center" valign="middle">Dec</td> </tr> </table> </td> <td align="left" valign="top">

</td> </tr> </table> <table width="100%" height="40" border="0" cellpadding="0" cellspacing="0" bgcolor="#0099CC"> <tr> <td> </td> <td> </td> <td width="500"><input name="Submit" type="button" class="button" onClick="selectAll(true)" value="Select All"> <input name="Submit" type="button" class="button" onClick="resetAll()" value="Reset All"> <input name="Submit" type="button" class="button" onClick="selectAll(false)" value="Reverse Select"></td> </tr> </table>
</body> </textarea>

<input onclick="runEx('code')" onfocus=this.blur() style="CURSOR: hand" type=button value=运行代码> <input name=Submit onclick=cycode(code) onfocus=this.blur() style="CURSOR: hand; WIDTH: 95px" type=button value=复制到剪贴板> <input onclick=svcode(code) onfocus=this.blur() style="CURSOR: hand" type=button value=另存代码> [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

</td> </tr> </table>
↑返回目录
前一篇: 模仿combox(select)控件
后一篇: xWin之JS版