我在我的一个项目中使用flatpickr。我的场景是,我有一个使用flatpickr的范围日期选择器。在我选择一个日期范围后,我有另一个日期选择器,所有选定的日期都被选中并变成绿色。现在,每当我想从选定的日期中删除一个日期时,日期应该变成红色。如果我选择取消选择的日期,它应该再次变成绿色。
的数据
下面是日期选择器的html代码:
<div class="column-2 w-100 w-100 d-flex justify-content-between">
<p class="w-25 fs-6 fw-bold">Operational calendar</p>
<div class="w-75 d-flex gap-3">
<input type="text" name="" class="form-control bg-light" id="dateRangePicker" placeholder="Select date" />
{{-- <input type="date" class="form-control" /> --}}
</div>
</div>
<div class="column-2 w-100 w-100 d-flex justify-content-between">
<p class="w-25 fs-6 fw-bold">Opening and closing dates</p>
<div class="w-75 d-flex gap-3">
<input type="hidden" name="" />
<div id="dateRangePicker2" class="w-100"></div>
{{-- <input type="date" class="form-control" /> --}}
</div>
</div>
字符串
下面是JavaScript代码:
document.addEventListener("DOMContentLoaded", function () {
var dateRangePicker = document.getElementById("dateRangePicker");
var dateRangePicker2 = document.getElementById("dateRangePicker2");
var picker = flatpickr(dateRangePicker, {
mode: "range",
dateFormat: "d-m-Y",
onChange: function (selectedDates) {
updateMultiDatePicker(selectedDates);
},
});
var picker2 = flatpickr(dateRangePicker2, {
mode: "multiple",
dateFormat: "Y-m-d",
open: true,
inline: true,
allowInput: true,
onChange: function (selectedDates) {
updateDeselectedDates(selectedDates);
},
});
function updateMultiDatePicker(selectedDates) {
const allDates = document.querySelectorAll("#dateRangePicker2 .flatpickr-day");
allDates.forEach(function (el) {
el.classList.add("blabla");
});
// console.log(allDates)
if (selectedDates.length === 2) {
var startDate = selectedDates[0];
var endDate = selectedDates[1];
var datesToUpdate = [];
var currentDate = new Date(startDate);
while (currentDate <= endDate) {
datesToUpdate.push(new Date(currentDate));
currentDate.setDate(currentDate.getDate() + 1);
}
picker2.setDate(datesToUpdate);
}
}
function updateDeselectedDates(selectedDates) {
const allSelectedDates = document.querySelectorAll(".flatpickr-day.selected");
// allSelectedDates.addClass
allSelectedDates.forEach(function (dateElement) {
dateElement.classList.add("blabla");
if (!dateElement.classList.contains("blabla")) {
dateElement.addEventListener("click", function () {
dateElement.classList.add("deselected");
});
}
const dateString = dateElement.getAttribute("aria-label");
const isSelected = selectedDates.includes(dateString);
// if (isSelected) {
// if (!dateElement.classList.contains('selected')) {
// dateElement.classList.add('deselected');
// } else {
// dateElement.classList.remove('deselected');
// }
// }
});
}
});
型
所以你可以看到,对于绿色的日期,当他们被取消选择,应该变成红色。这就是我想要的,到目前为止,我已经得到了。
1条答案
按热度按时间ui7jx7zq1#
似乎flatpickr没有提供API来向日历中的日期元素添加自定义类,但是我们可以使用它们的
aria-label
值来选择和样式化取消选择的日期。1.创建一个constructed stylesheet。这是我们将保存的红色取消选择日期的CSS规则:
1.获取我们对
updateMultiDatePicker()
感兴趣的日期的aria-labels
列表:1.将
aria-label
值列表转换为CSS选择器:1.添加CSS规则以使日历中的这些日期单元格为红色:
的字符串