便宜上、クラスの辞書を作成しました。flatpickr が onCreateDay コールバックをトリガーしている日に関連付けられた番号を取得する方法として、オブジェクトのキーを使用できます。日に関連付けられた値を使用して、ディクショナリからクラスを取得し、それが空でない場合は要素に追加できます。
関連すると思われるいくつかのことを強調するために、コードにいくつかの説明を追加しました。
このページでスクリプトを実行して確認するか (表示されない場合は全画面表示)、このfiddleで確認できます。
それが役に立てば幸い。
var dates = {
20161029: 3,
20161030: 0,
20161031: 0,
20161101: 4,
20161102: 4,
20161103: 4,
20161104: 5,
20161105: 1,
20161106: 0,
20161107: 4,
20161108: 3,
20161109: 3,
20161110: 4
},
classDict = {
0: 'redClass',
1: 'greenClass',
3: 'blueClass',
4: 'greyClass',
5: 'orangeClass'
};
// Better always use a two digit format in your dates obj
function get2DigitFmt(val) {
return ('0' + val).slice(-2);
}
// onDayCreate event, add class to day if date has a class
flatpickr("#dayCreate", {
onDayCreate: function(dObj, dStr, fp, dayElem) {
var date = dayElem.dateObj,
// Note the + 1 in the month.
key = date.getFullYear() + get2DigitFmt(date.getMonth() + 1) + get2DigitFmt(date.getDate()),
value = classDict[dates[key]];
if (value) {
dayElem.className += ' ' + value;
}
}
});
.redClass {
background-color: red !important;
}
.greenClass {
background-color: green !important;
}
.blueClass {
background-color: blue !important;
}
.greyClass {
background-color: grey !important;
}
.orangeClass {
background-color: orange !important;
}
<link rel="stylesheet" href="https://unpkg.com/flatpickr/dist/flatpickr.min.css">
<script src="https://unpkg.com/flatpickr"></script>
<input id="dayCreate" type="text" placeholder="Select Date..">
アップデート
ディクショナリのアイデアは、クラスの追加/削除を簡素化し、醜いスイッチや長い if を避けることでした。ただし、コードを簡単に変更して、値 (3 より大きい値のみがクラスを取得) でフィルタリングし、条件が満たされたときに必要なクラスを追加することができます。
たとえば(フィドル):
function getClass(value) {
// Here you could put any logic you want. Ifs, add the value to a string, whatever...
return value === 4 ? 'redClass' : 'blueClass';
}
// onDayCreate event, add class to day if date has a class
flatpickr("#dayCreate", {
onDayCreate: function(dObj, dStr, fp, dayElem) {
var date = dayElem.dateObj,
// Note the + 1 in the month.
key = date.getFullYear() + get2DigitFmt(date.getMonth() + 1) + get2DigitFmt(date.getDate()),
value = dates[key];
if (value > 3) {
dayElem.className += ' ' + getClass(value);
}
}
});
私が提供したソリューションでわかるように、日付に関連付けられた値を取得するためにオブジェクトを常にループする必要はありません。flatpickr の日付から日付のキーを構成する定数時間で取得できます。日を構築する際に提供します (onCreateDay コールバック)。
アップデート
ドキュメントによると (またはそのように思われます)、onDayCreate コールバック内で現在の日付を取得するには、fp (currentYear および currentMonth) と dayElem (textContent) のプロパティを使用する必要があります。
ただし、 currentMonth は、常にフラットピッカーが現在表示している月を返します。その日の月ではありません (カレンダーは 11 月を表示できますが、日は 10 月または 12 月の可能性があります)。 .
このフィドルでは、dateObj を使用せず、ドキュメントのように機能するソリューションを見つけることができます。
コードは次のとおりです。
// Better always use a two digit format in your dates obj
function get2DigitFmt(val) {
return ('0' + val).slice(-2);
}
function getClass(value) {
// Here you could put any logic you want. Ifs, add the value to a string, whatever...
return value === 4 ? 'redClass' : 'blueClass';
}
// Adjust month depending on the month's day
function getMonth(currentMonth, dayClass) {
return currentMonth + (dayClass.contains('prevMonthDay') ? 0 : (1 + Number(dayClass.contains('nextMonthDay'))));
}
function getDateKey(year, month, day) {
return year + get2DigitFmt(month) + get2DigitFmt(day);
}
// onDayCreate event, add class to day if date has a class
flatpickr("#dayCreate", {
onDayCreate: function(dObj, dStr, fp, dayElem) {
var key = getDateKey(fp.currentYear, getMonth(fp.currentMonth, dayElem.className), dayElem.textContent),
value = dates[key];
if (value > 3) {
dayElem.className += ' ' + getClass(value);
}
}
});