项目中需要用到月份选择器,找到了几款日期选择器 datepicker, 但是我不需要选择具体的日期,虽然有个可以支持只显示月份的,但是显得比较臃肿。

所以,还是决定自己实现一个吧。最后封装成了 jQuery 的插件,插件地址为:

bootstrap-monthpicker

其实编写 jQuery 插件很简单,使用起来也简单,把相同的代码提取出来写成 jQuery 的插件, 这样不仅仅可以省很多代码量,还可以很好的提高开发速度。

这里,把自己编写插件的步骤记录下来,希望有需要的人可以参考下。

1. 编写基本的 html 代码

日期选择器需要年份选择,以及12个月的月份选择。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<div class="mp-dialog">
	<div class="mp-title">
		<i class="glyphicon glyphicon-circle-arrow-left"></i>
		<span>2013</span>
		<i class="glyphicon glyphicon-circle-arrow-right"></i>
	</div>
	<div class="mp-content">
		<ul>
			<li></li>
			<li></li>
			...
			<li>十二</li>
		</ul>
	</div>
</div>

2. 编写基本的 css 代码

根据 html 代码,编写我们所需要的 css 样式。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
.mp-dialog {
	position: absolute;
	z-index: 1000;
	width: 282px;
	height: 260px;
	background: #fff;
	border-radius: 5px;
	border: 1px solid #ccc;
	display: none;
}
.mp-title {
	text-align: center;
	line-height: 40px;
	background: #92cade;
	color: #fff;
	border-radius: 5px 5px 0 0;
}
.mp-title i {
	cursor: pointer;
}
.mp-content ul {
	list-style: none;
	margin: 0;
	padding: 20px;
}
.mp-content li {
	text-align: center;
	line-height: 48px;
	float: left;
	margin: 6px;
	padding: 0;
	width: 48px;
	height: 48px;
	border: 2px dotted #ccc;
	cursor: pointer;
	border-radius: 5px;
}
.mp-content li:hover, .mp-content li.active {
	background: #f5f9fc;
	border: 2px dotted #ffaaaa;
}

3. 编写基本的 js 事件监听

我们需要对上一年和下一年进行事件监听,并显示我们想要的年份。

1
2
3
4
5
<div class="mp-title">
	<i class="mp-year-prev glyphicon glyphicon-circle-arrow-left"></i>
	<span>2013</span>
	<i class="mp-year-next glyphicon glyphicon-circle-arrow-right"></i>
</div>

这里添加了 mp-year-prev 和 mp-year-next 两个类。

1
2
3
4
5
6
7
8
9
var year = 2013;
$('.mp-year-prev').click(function() {
	year--;
	$('.mp-title span').text(year);
});
$('.mp-year-next').click(function() {
	year++;
	$('.mp-title span').text(year);
});

我们在月份中加上了 data-month 属性,方便知道是选择哪个月份。

1
2
3
4
<li data-month="0"></li>
<li data-month="1"></li>
...
<li data-month="11">十二</li>

并添加对月份选择的监听。

1
2
3
$('.mp-content li').click(function() {
	console.log($(this).data);
});

4. 封装成 jQuery 插件

自己写 jQuery 插件的时候有个基本的模块,详细见 源码

需要做的事情:

  • 将基本的 html 让 js 来自动生成
  • 监听事件使用 $el.off(‘click’).on(‘click’) 或者绑定监听
  • 将月份选择器加在 input 或者 div、span 选择器中
  • 对于 input 使用 val(),对于 div、span 使用 text()

至此,我们的月份选择器插件就完成了。