分享
 
 
 

COOL而实用的动态效果

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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

PS:

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

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

运行代码框

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>calendar</title>

<style type="text/css">

/*button style*/

.button{

padding: 2px;

color: #F5F5F5;

background-color: #3665A5;

border-width: 1px 2px 2px 1px;

border-color: #D2D2D2 #305B93 #305B93 #D2D2D2;

border-style: solid;

font: bold 14px verdana;

}

body,td{margin:0;font:12px verdana;cursor:default;}

#ca td{/*width:20px;height:25px;*/border-right:1px solid;border-bottom:1px solid;text-align:center;}

.daysTitle td{border-right:1px solid #A6D2FF;text-align:center;font-weight:bold;}

.font_red{color:red;}

.monthsTitle td{border-bottom:1px solid #A6D2FF;text-align:center;color:#fafafa;}

.bg_red{background-color:#FF0000;color:#FFFFCC; border-color:#FFCCCC;}

.bg_green{background-color:#00CC00;}

.inactive{background-color:#E1F0FF; border-color:#A6D2FF;}

.noData{background-color:#ccc; border-color:#999;}

</style>

<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="<a style='color:red' >共选中"+selectedID.length+"个数据</a>"+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="<a style='color:red' >共选中"+selectedID.length+"个数据</a>"+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<temp_m1?temp_m:temp_m1;

sD=temp_d<temp_d1?temp_d:temp_d1;

eM=temp_m<temp_m1?temp_m1:temp_m;

eD=temp_d<temp_d1?temp_d1:temp_d;

selectDate(sM,eM,sD,eD)

selectDate(temp_m,temp_m,temp_d,temp_d)

}

}

/********************************************************/

dayObj.onclick=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")

{

selectDay(eventObj)

}

}

monthObj.onclick=function(event)

{

if(event == null){

event = window.event; // For IE

}

var eventObj = event.srcElement? event.srcElement : event.target; // IE use

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有