jQuery写的日历(包括日历的样式及功能)


Posted in Javascript onApril 23, 2013
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
<title></title> 
<script src="../JS/connotation.js" type="text/javascript"></script> 
<script type="text/javascript"> 
var c = new Calendar("c"); 
document.write(c); 
</script> 
</head> 
<body> 
<div> 
普通调用:<input type="text" name="txt2" onclick="c.showMoreDay = true; c.show(this);" /><br /> 
<div style="height: 262px"> 
</div> 
按钮调用:<input type="text" name="btntxt" id="btntxt" /><input name="button" value="*" 
id="button" type="button" onclick="c.showMoreDay = true; c.show(getObjById('btntxt'), '1982-1-1', this)" /> 
<br /> 
<input type="text" name="btntxt3" id="btntxt3" /><input name="button3" value="*" 
id="button3" type="button" onclick="c.showMoreDay = true; c.show(this, getObjById('btntxt3'))" /> 
</div> 
</body> 
</html>

需要的jQuery文件
function Calendar(objName) 
{ 
this.style = { 
borderColor : "#909eff", //边框颜色 
headerBackColor : "#909EFF", //表头背景颜色 
headerFontColor : "#ffffff", //表头字体颜色 
bodyBarBackColor : "#f4f4f4", //日历标题背景色 
bodyBarFontColor : "#000000", //日历标题字体色 
bodyBackColor : "#ffffff", //日历背景色 
bodyFontColor : "#000000", //日历字体色 
bodyHolidayFontColor : "#ff0000", //假日字体色 
watermarkColor : "#d4d4d4", //背景水印色 
moreDayColor : "#cccccc" 
}; 
this.showMoreDay = false; //是否显示上月和下月的日期 
this.Obj = objName; 
this.date = null; 
this.mouseOffset = null; 
this.dateInput = null; 
this.timer = null; 
}; 
Calendar.prototype.toString = function() 
{ 
var str = this.getStyle(); 
str += '<div Author="alin" class="calendar" style="display:none;" onselectstart="return false" oncontextmenu="return false" id="Calendar">\n'; 
str += '<div Author="alin" class="cdrWatermark" id="cdrWatermark"></div><div id="cdrBody" style="position:absolute;left:0px;top:0px;z-index:2;width:140px;">'; 
str += this.getHeader(); 
str += this.getBody(); 
str += '</div><div Author="alin" id="cdrMenu" style="position:absolute;left:0px;top:0px;z-index:3;display:none;" onmouseover="' + this.Obj + '.showMenu(null);" onmouseout="' + this.Obj + '.hideMenu();"></div></div>'; 
return str; 
}; 
Calendar.prototype.getStyle = function() 
{ 
var str = '<style type="text/css">\n'; 
str += '.calendar{position:absolute;width:140px!important;width :142px;height:184px!important;height :174px;background-color:'+this.style.bodyBackColor+';border:1px solid ' + this.style.borderColor + ';left:0px;top:0px;z-index:9999;}\n'; 
str += '.cdrHeader{background-color:'+ this.style.headerBackColor +';width:140px;height:22px;font-size:12px;color:'+this.style.headerFontColor+';}\n'; 
str += '.cdrWatermark{position:absolute;left:0px;top:55px;width:140px;font-family: Arial Black;font-size:50px;color:'+this.style.watermarkColor+';z-index:1;text-align:center;}\n'; 
str += '.cdrBodyBar{background-color:' + this.style.bodyBarBackColor + ';font-size:12px;color:' + this.style.bodyBarFontColor + ';width:140px;height:20px;}\n'; 
str += '.cdrBody{width:140px;height:122px!important; height :110px;font-size:12px;cursor:pointer;color:' + this.style.bodyFontColor + ';}\n'; 
str += '.dayOver{height:16px;padding:0px;border:1px solid black;background-color:#f4f4f4;}\n'; 
str += '.dayOut{padding:1px;border:none;height:16px;}\n'; 
str += '.menuOver{background-color:'+this.style.headerBackColor+';color:'+this.style.headerFontColor+';font-size:12px;}\n'; 
str += '.headerOver{border:1px solid black;background-color:#f4f4f4;color:black;cursor:default;}\n'; 
str += '.cdrMenu{font-size:12px;border:1px solid #000000;background-color:#ffffff;cursor:default;width:100%}\n'; 
str += 'html>body #Calendar{width:142px;174px;}'; 
str += '</style>\n'; 
return str; 
}; 
Calendar.prototype.getHeader = function() 
{ 
var str = '<table Author="alin" class="cdrHeader" cellSpacing="2" cellPadding="0"><tr Author="alin" align="center">\n'; 
str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" onmouseout="this.className=\'\'" id="previousYear" title="上一年份" style="cursor:pointer;width:10px;" onclick="'+this.Obj+'.onChangeYear(false);"><<</td>\n'; 
str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" onmouseout="this.className=\'\'" id="previousMonth" title="上一月份" style="cursor:pointer;width:10px;" onclick="'+this.Obj+'.onChangeMonth(false);"><</td>\n'; 
str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" id="currentYear" style="width:50px;" onclick="' + this.Obj + '.showMenu(true);" onmouseout="' + this.Obj + '.hideMenu();this.className=\'\';">0</td>\n'; 
str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" id="currentMonth" onclick="' + this.Obj + '.showMenu(false);" onmouseout="' + this.Obj + '.hideMenu();this.className=\'\';">0</td>\n'; 
str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" onmouseout="this.className=\'\'" id="nextMonth" title="下一月份" style="cursor:pointer;width:10px;" onclick="'+this.Obj+'.onChangeMonth(true);">></td>\n'; 
str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" onmouseout="this.className=\'\'" id="nextYear" title="下一年份" style="cursor:pointer;width:10px;" onclick="'+this.Obj+'.onChangeYear(true);">>></td></tr>\n'; 
str += '</table>\n'; 
return str; 
}; 
Calendar.prototype.getBody = function() 
{ 
var n = 0; 
var str = this.getBodyBar(); 
str += '<table Author="alin" class="cdrBody" cellSpacing="2" cellPadding="0">\n'; 
for(i = 0; i < 6; i++) 
{ 
str += '<tr Author="alin" align="center">'; 
for(j = 0; j < 7; j++) 
{ 
str += '<td Author="alin" class="dayOut" id="cdrDay'+(n++)+'" width="13%"></td>\n'; 
} 
str += '</tr>'; 
} 
str += '</table>\n'; 
str += '<table Author="alin" class="cdrBodyBar" cellSpacing="2" cellPadding="0"><tr align="center" Author="alin"><td Author="alin" style="cursor:pointer;" onclick="'+this.Obj+'.getToday();">今天:'+new Date().toFormatString("yyyy年mm月dd日")+'</td></tr></table>\n'; 
return str; 
}; 
Calendar.prototype.getBodyBar = function() 
{ 
var str = '<table Author="alin_bar" id="cdrBodyBar" class="cdrBodyBar" style="cursor:move;" cellSpacing="2" cellPadding="0"><tr Author="alin_bar" align="center">\n'; 
var day = new Array('日','一','二','三','四','五','六'); 
for(i = 0; i < 7; i++) 
{ 
str += '<td Author="alin_bar">' + day[i] + '</td>\n'; 
} 
str += '</tr></table>'; 
return str; 
} 
Calendar.prototype.getYearMenu = function(year) 
{ 
var str = '<table Author="alin" cellSpacing="0" class="cdrMenu" cellPadding="0">\n'; 
for(i = 0; i < 10; i++) 
{ 
var _year = year + i; 
var _date = new Date(_year,this.date.getMonth(),this.date.getDate()); 
str += '<tr Author="alin" align="center"><td Author="alin" width="13%" height="16" '; 
if(this.date.getFullYear() != _year) 
{ 
str += 'onmouseover="this.className=\'menuOver\'" onmouseout="this.className=\'\'" '; 
} 
else 
{ 
str += 'class="menuOver"'; 
} 
str += 'onclick="' + this.Obj + '.bindDate(\'' + _date.toFormatString("-") + '\')">' + _year + '年</td>\n'; 
str += '</tr>'; 
} 
str += '<tr Author="alin" align="center"><td Author="alin"><table Author="alin" style="font-size:12px;width:100%;" cellSpacing="0" cellPadding="0">\n'; 
str += '<tr Author="alin" align="center"><td Author="alin" onmouseover="this.className=\'menuOver\'" onmouseout="this.className=\'\'" onclick="'+this.Obj+'.getYearMenu('+ (year - 10) + ')"><<</td>\n'; 
str += '<td Author="alin" onmouseover="this.className=\'menuOver\'" onmouseout="this.className=\'\'" onclick="'+this.Obj+'.getYearMenu('+ (year + 10) +')">>></td><tr>\n'; 
str += '</table></td></tr>\n'; 
str += '</table>'; 
var _menu = getObjById("cdrMenu"); 
_menu.innerHTML = str; 
}; 
Calendar.prototype.getMonthMenu = function() 
{ 
var str = '<table Author="alin" cellSpacing="0" class="cdrMenu" cellPadding="0">\n'; 
for(i = 1; i <= 12; i++) 
{ 
var _date = new Date(this.date.getFullYear(),i-1,this.date.getDate()); 
str += '</tr><tr Author="alin" align="center"><td Author="alin" height="16" '; 
if(this.date.getMonth() + 1 != i) 
{ 
str += 'onmouseover="this.className=\'menuOver\'" onmouseout="this.className=\'\'" '; 
} 
else 
{ 
str += 'class="menuOver"'; 
} 
str += 'onclick="' + this.Obj + '.bindDate(\'' + _date.toFormatString("-") + '\')">'+i+'月</td></tr>\n'; 
} 
str += '</table>'; 
var _menu = getObjById("cdrMenu"); 
_menu.innerHTML = str; 
}; 
Calendar.prototype.show = function() 
{ 
if (arguments.length > 3 || arguments.length == 0) 
{ 
alert("对不起!传入参数不对!" ); 
return; 
} 
var _date = null; 
var _evObj = null; 
var _initValue = null 
for(i = 0; i < arguments.length; i++) 
{ 
if(typeof(arguments[i]) == "object" && arguments[i].type == "text") 
{_date = arguments[i];} 
else if(typeof(arguments[i]) == "object") 
{_evObj = arguments[i];} 
else if(typeof(arguments[i]) == "string") 
{_initValue = arguments[i];} 
} 
_evObj = _evObj || _date; 
inputObj = _date; 
targetObj = _evObj 
if(!_date){alert("传入参数错误!"); return;} 
this.dateInput = _date; 
_date = _date.value; 
if(_date == "" && _initValue) _date = _initValue; 
this.bindDate(_date); 
var _target = getPosition(_evObj); 
var _obj = getObjById("Calendar"); 
_obj.style.display = ""; 
_obj.style.left = _target.x + 'px'; 
if((document.body.clientHeight - (_target.y + _evObj.clientHeight)) >= _obj.clientHeight) 
{ 
_obj.style.top = (_target.y + _evObj.clientHeight) + 'px'; 
} 
else 
{ 
_obj.style.top = (_target.y - _obj.clientHeight) + 'px'; 
} 
}; 
Calendar.prototype.hide = function() 
{ 
var obj = getObjById("Calendar"); 
obj.style.display = "none"; 
}; 
Calendar.prototype.bindDate = function(date) 
{ 
var _monthDays = new Array(31,30,31,30,31,30,31,31,30,31,30,31); 
var _arr = date.split('-'); 
var _date = new Date(_arr[0],_arr[1]-1,_arr[2]); 
if(isNaN(_date)) _date = new Date(); 
this.date = _date; 
this.bindHeader(); 
var _year = _date.getFullYear(); 
var _month = _date.getMonth(); 
var _day = 1; 
var _startDay = new Date(_year,_month,1).getDay(); 
var _previYear = _month == 0 ? _year - 1 : _year; 
var _previMonth = _month == 0 ? 11 : _month - 1; 
var _previDay = _monthDays[_previMonth]; 
if (_previMonth == 1) _previDay =((_previYear%4==0)&&(_previYear0!=0)||(_previYear@0==0))?29:28; 
_previDay -= _startDay - 1; 
var _nextDay = 1; 
_monthDays[1] = ((_year%4==0)&&(_year0!=0)||(_year@0==0))?29:28; 
for(i = 0; i < 40; i++) 
{ 
var _dayElement = getObjById("cdrDay" + i); 
_dayElement.onmouseover = Function(this.Obj + ".onMouseOver(this)"); 
_dayElement.onmouseout = Function(this.Obj + ".onMouseOut(this)"); 
_dayElement.onclick = Function(this.Obj + ".onClick(this)"); 
this.onMouseOut(_dayElement); 
_dayElement.style.color = ""; 
if(i < _startDay) 
{ 
//获取上一个月的日期 
if(this.showMoreDay) 
{ 
var _previDate = new Date(_year,_month - 1,_previDay); 
_dayElement.innerHTML = _previDay; 
_dayElement.title = _previDate.toFormatString("yyyy年mm月dd日"); 
_dayElement.value = _previDate.toFormatString("-"); 
_dayElement.style.color = this.style.moreDayColor; 
_previDay++; 
}else 
{ 
_dayElement.innerHTML = ""; 
_dayElement.title = ""; 
} 
} 
else if(_day > _monthDays[_month]) 
{ 
//获取下个月的日期 
if(this.showMoreDay) 
{ 
var _nextDate = new Date(_year,_month + 1,_nextDay); 
_dayElement.innerHTML = _nextDay; 
_dayElement.title = _nextDate.toFormatString("yyyy年mm月dd日"); 
_dayElement.value = _nextDate.toFormatString("-"); 
_dayElement.style.color = this.style.moreDayColor; 
_nextDay++; 
}else 
{ 
_dayElement.innerHTML = ""; 
_dayElement.title = ""; 
} 
} 
else if(i >= new Date(_year,_month,1).getDay() && _day <= _monthDays[_month]) 
{ 
//获取本月日期 
_dayElement.innerHTML = _day; 
if(_day == _date.getDate()) 
{ 
this.onMouseOver(_dayElement); 
_dayElement.onmouseover = Function(""); 
_dayElement.onmouseout = Function(""); 
} 
if(this.isHoliday(_year,_month,_day)) 
{ 
_dayElement.style.color = this.style.bodyHolidayFontColor; 
} 
var _curDate = new Date(_year, _month, _day); 
_dayElement.title = _curDate.toFormatString("yyyy年mm月dd日"); 
_dayElement.value = _curDate.toFormatString("-"); 
_day++; 
} 
else 
{ 
_dayElement.innerHTML = ""; 
_dayElement.title = ""; 
} 
} 
var _menu = getObjById("cdrMenu"); 
_menu.style.display = "none"; 
}; 
Calendar.prototype.bindHeader = function() 
{ 
var _curYear = getObjById("currentYear"); 
var _curMonth = getObjById("currentMonth"); 
var _watermark = getObjById("cdrWatermark"); 
_curYear.innerHTML = this.date.toFormatString("yyyy年"); 
_curMonth.innerHTML = this.date.toFormatString("mm月"); 
_watermark.innerHTML = this.date.getFullYear(); 
}; 
Calendar.prototype.getToday = function() 
{ 
var _date = new Date(); 
this.bindDate(_date.toFormatString("-")); 
}; 
Calendar.prototype.isHoliday = function(year,month,date) 
{ 
var _date = new Date(year,month,date); 
return (_date.getDay() == 6 || _date.getDay() == 0); 
}; 
Calendar.prototype.onMouseOver = function(obj) 
{ 
obj.className = "dayOver"; 
}; 
Calendar.prototype.onMouseOut = function(obj) 
{ 
obj.className = "dayOut"; 
}; 
Calendar.prototype.onClick = function(obj) 
{ 
if(obj.innerHTML != "") this.dateInput.value = obj.value; 
this.hide(); 
}; 
Calendar.prototype.onChangeYear = function(isnext) 
{ 
var _year = this.date.getFullYear(); 
var _month = this.date.getMonth() + 1; 
var _date = this.date.getDate(); 
if(_year > 999 && _year <10000) 
{ 
if(isnext){_year++;}else{ _year --;} 
} 
else 
{ 
alert("年份超出范围(1000-9999)!"); 
} 
this.bindDate(_year + '-' + _month + '-' + _date); 
}; 
Calendar.prototype.onChangeMonth = function(isnext) 
{ 
var _year = this.date.getFullYear(); 
var _month = this.date.getMonth() + 1; 
var _date = this.date.getDate(); 
if(isnext){ _month ++;} else {_month--;} 
if(_year > 999 && _year <10000) 
{ 
if(_month < 1) {_month = 12; _year--;} 
if(_month > 12) {_month = 1; _year++;} 
} 
else 
{ 
alert("年份超出范围(1000-9999)!"); 
} 
this.bindDate(_year + '-' + _month + '-' + _date); 
}; 
Calendar.prototype.showMenu = function(isyear) 
{ 
var _menu = getObjById("cdrMenu"); 
if(isyear != null) 
{ 
var _obj = (isyear)? getObjById("currentYear") : getObjById("currentMonth"); 
if(isyear) 
{ 
this.getYearMenu(this.date.getFullYear() - 5); 
} 
else 
{ 
this.getMonthMenu(); 
} 
_menu.style.top = (_obj.offsetTop + _obj.offsetHeight) + 'px'; 
_menu.style.left = _obj.offsetLeft + 'px'; 
_menu.style.width = _obj.offsetWidth + 'px'; 
} 
if (this.timer != null) clearTimeout(this.timer); 
_menu.style.display=""; 
} 
Calendar.prototype.hideMenu = function() 
{ 
var _obj = getObjById("cdrMenu"); 
this.timer = window.setTimeout(function(){_obj.style.display='none';},500); 
} 
Number.prototype.NaN0 = function() 
{ 
return isNaN(this) ? 0 : this; 
} 
Date.prototype.toFormatString = function(fs) 
{ 
if(fs.length == 1) 
{ 
return this.getFullYear() + fs + (this.getMonth() + 1) + fs + this.getDate(); 
} 
fs = fs.replace("yyyy",this.getFullYear()); 
fs = fs.replace("mm",(this.getMonth() + 1)); 
fs = fs.replace("dd",this.getDate()); 
return fs; 
} 
var inputObj = null; 
var targetObj = null; 
var dragObj = null; 
var mouseOffset = null; 
function getObjById(obj) 
{ 
if(document.getElementByIdx_x) 
{ 
return document.getElementByIdx_x(obj); 
} 
else 
{ 
alert("浏览器不支持!"); 
} 
} 
function mouseCoords(ev) 
{ 
if(ev.pageX || ev.pageY){ 
return {x:ev.pageX, y:ev.pageY}; 
} 
return { 
x:ev.clientX + document.body.scrollLeft - document.body.clientLeft, 
y:ev.clientY + document.body.scrollTop - document.body.clientTop 
}; 
} 
function getPosition(e) 
{ 
var left = 0; 
var top = 0; 
while (e.offsetParent){ 
left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0); 
top += e.offsetTop + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0); 
e = e.offsetParent; 
} 
left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0); 
top += e.offsetTop + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0); 
return {x:left, y:top}; 
} 
function getMouseOffset(target, ev) 
{ 
ev = ev || window.event; 
var docPos = getPosition(target); 
var mousePos = mouseCoords(ev); 
return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y}; 
} 
function closeCalendar(evt){ 
evt = evt || window.event; 
var _target= evt.target || evt.srcElement; 
if(!_target.getAttribute("Author") && _target != inputObj && _target != targetObj) 
{ 
getObjById("Calendar").style.display = "none"; 
} 
} 
function dragStart(evt){ 
evt = evt || window.event; 
var _target= evt.target || evt.srcElement; 
if(_target.getAttribute("Author") == "alin_bar") 
{ 
dragObj = getObjById("Calendar"); 
mouseOffset = getMouseOffset(dragObj, evt); 
} 
} 
function drag(evt) 
{ 
evt = evt || window.event; 
if(dragObj) 
{ 
var mousePos = mouseCoords(evt); 
dragObj.style.left = (mousePos.x - mouseOffset.x) + 'px'; 
dragObj.style.top = (mousePos.y - mouseOffset.y) + 'px'; 
} 
} 
//拖动结束 
function dragEnd(evt) 
{ 
dragObj = null; 
} 
document.onclick = closeCalendar; 
document.onmousedown = dragStart; 
document.onmousemove = drag; 
document.onmouseup = dragEnd;
Javascript 相关文章推荐
在IE6下发生Internet Explorer cannot open the Internet site错误
Jun 21 Javascript
Jquery中val()表单取值赋值的实例代码
Aug 15 Javascript
Jquery Validate 正则表达式实用验证代码大全
Aug 23 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
Oct 17 Javascript
详谈JavaScript 匿名函数及闭包
Nov 14 Javascript
js 模仿锚点定位的实现方法
Nov 19 Javascript
jQuery获取this当前对象子元素对象的方法
Nov 29 Javascript
AngularJS指令中的绑定策略实例分析
Dec 14 Javascript
js调用刷新界面的几种方式
May 03 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
Mar 26 Javascript
Vue插件打包与发布的方法示例
Aug 20 Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
Apr 23 #Javascript
js事件冒泡实例分享(已测试)
Apr 23 #Javascript
js绑定事件this指向发生改变的问题解决方法
Apr 23 #Javascript
js判断生效时间不得大于失效时间的思路及代码
Apr 23 #Javascript
修改file按钮的默认样式实现代码
Apr 23 #Javascript
js随机颜色代码的多种实现方式
Apr 23 #Javascript
js对象与打印对象分析比较
Apr 23 #Javascript
You might like
php框架Phpbean说明
2008/01/10 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
nodeJs实现基于连接池连接mysql的方法示例
2018/02/10 NodeJs
关于vue中 $emit的用法详解
2018/04/12 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
JS访问对象两种方式区别解析
2020/08/29 Javascript
python 计算数据偏差和峰度的方法
2019/06/29 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
pytorch 多分类问题,计算百分比操作
2020/07/09 Python
Python如何操作docker redis过程解析
2020/08/10 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
《小松树和大松树》教学反思
2014/02/20 职场文书
房屋出售协议书
2014/04/10 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
2015年酒店工作总结
2015/04/28 职场文书
工程款催款函
2015/06/24 职场文书
培训计划通知
2015/07/15 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python