使用这个是 Datepicker UI jQuery
Using this is Datepicker UI jQuery
我的日期选择器中有一个 onClick
事件,我正在尝试将 html
附加到实际的 td
元素 I select.
$('#datepicker').datepicker({
dateFormat: 'dd/mm/yy',
beforeShowDay: enableAllTheseDays,
dayNamesMin: ["M", "T", "W", "T", "F", "S", "S"],
showOtherMonths: true,
onSelect: function(date) {
for (var i = 0; i < dateArray.length; i++) {
if (date === dateArray[i].date) {
$(this).append("<div class=\"class " + date + "\"><span>Pick a time</span><span class=\"times_available\">" + dateArray[i].time + "</span><span class=\"tickets_left\">" + dateArray[i].stock_qt + " tickets left<span></div>");
console.log(this);
}
}
}
});
html
就是:<div id="datepicker"></div>
忽略所有循环,但基本上,当我在 onSelect
中使用 $(this)
时,this
指的是我的日期选择器。不是 td 元素 I select。如果我使用 date
jQuery UI 给我的东西,它会显示我 select 的 td 元素的日期。所以我显然可以读取每个 td,如何将 html 附加到我单击的 td 元素。
我尝试在此 onSelect
之外做一个 onClick
,但如果我这样做,我会更改月份。 onClick
事件没有触发。
如果你真的想访问点击的<td>
,你可以如下破解。请注意,这是基于未记录属性的 hack,因此它可能会在未来的版本中中断。
$(function() {
$("#datepicker").datepicker({
onSelect: function(date, instance) {
var data = date.split('/');
var month = data[0] < 10 ? data[0].charAt(1) - 1 : data[0] - 1;
var day = data[1] < 10 ? data[1].charAt(1) : data[1];
var year = data[2];
var $table = instance.dpDiv;
var td = $table.find('tbody td').filter(function(i, el) {
var $el = $(el);
var $a = $el.find('a');
return ($a.text() == day && $el.data('month') == month && $el.data('year') == year);
});
}
});
});
<script src="//code.jquery.com/jquery-1.9.1.min.js"></script>
<link href="//code.jquery.com/ui/1.9.2/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<script src="//code.jquery.com/ui/1.9.2/jquery-ui.min.js"></script>
<input id="datepicker">
由于 jQuery 为日历动态添加了 table,您将不得不跳过一些 css 选择器和过滤器框才能到达您想要的单元格。
.ui-datepicker-calendar td
应该会为您提供日历中的所有单元格。您可以编写一个回调函数,通过对日期执行测试来按值过滤单元格。找到单元格后,就可以进行追加了。
$(".ui-datepicker-calendar td").filter(function() {
var date = $(this).text();
return /\d/.test(date);
}).append('Blah'); // Whatever you want to append.
})
我的日期选择器中有一个 onClick
事件,我正在尝试将 html
附加到实际的 td
元素 I select.
$('#datepicker').datepicker({
dateFormat: 'dd/mm/yy',
beforeShowDay: enableAllTheseDays,
dayNamesMin: ["M", "T", "W", "T", "F", "S", "S"],
showOtherMonths: true,
onSelect: function(date) {
for (var i = 0; i < dateArray.length; i++) {
if (date === dateArray[i].date) {
$(this).append("<div class=\"class " + date + "\"><span>Pick a time</span><span class=\"times_available\">" + dateArray[i].time + "</span><span class=\"tickets_left\">" + dateArray[i].stock_qt + " tickets left<span></div>");
console.log(this);
}
}
}
});
html
就是:<div id="datepicker"></div>
忽略所有循环,但基本上,当我在 onSelect
中使用 $(this)
时,this
指的是我的日期选择器。不是 td 元素 I select。如果我使用 date
jQuery UI 给我的东西,它会显示我 select 的 td 元素的日期。所以我显然可以读取每个 td,如何将 html 附加到我单击的 td 元素。
我尝试在此 onSelect
之外做一个 onClick
,但如果我这样做,我会更改月份。 onClick
事件没有触发。
如果你真的想访问点击的<td>
,你可以如下破解。请注意,这是基于未记录属性的 hack,因此它可能会在未来的版本中中断。
$(function() {
$("#datepicker").datepicker({
onSelect: function(date, instance) {
var data = date.split('/');
var month = data[0] < 10 ? data[0].charAt(1) - 1 : data[0] - 1;
var day = data[1] < 10 ? data[1].charAt(1) : data[1];
var year = data[2];
var $table = instance.dpDiv;
var td = $table.find('tbody td').filter(function(i, el) {
var $el = $(el);
var $a = $el.find('a');
return ($a.text() == day && $el.data('month') == month && $el.data('year') == year);
});
}
});
});
<script src="//code.jquery.com/jquery-1.9.1.min.js"></script>
<link href="//code.jquery.com/ui/1.9.2/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<script src="//code.jquery.com/ui/1.9.2/jquery-ui.min.js"></script>
<input id="datepicker">
由于 jQuery 为日历动态添加了 table,您将不得不跳过一些 css 选择器和过滤器框才能到达您想要的单元格。
.ui-datepicker-calendar td
应该会为您提供日历中的所有单元格。您可以编写一个回调函数,通过对日期执行测试来按值过滤单元格。找到单元格后,就可以进行追加了。
$(".ui-datepicker-calendar td").filter(function() {
var date = $(this).text();
return /\d/.test(date);
}).append('Blah'); // Whatever you want to append.
})