Я внес некоторые изменения, чтобы сделать эту работу, как ожидалось. Я использовал label
, а также value
для элементов option
, а также передавал фактическое выбранное значение в обработчик select onchange
. Также я загрузил элементы в load
на теле, которые вы можете удалить. Я просто хотел, чтобы они загружались при загрузке страницы и т. Д. Поскольку вы не используете jQuery, он используется в обработчике событий onload
и т. Д.
const employees = [{
firstname: "Dav",
start: 2013,
end: 2018
},
{
firstname: "Gemmy",
start: 2016,
end: "Present"
}
]
function filterDates(sel) {
let filterDate = []
sel = sel || "All"
filterDate.push(...employees.filter(function(obj) {
switch (sel) {
case "All":
return true // return all
case "Past":
return obj.end < new Date().getFullYear() // just past years
case "Present":
return obj.end === 'Present'
}
}))
let fDate = "<table>";
filterDate.forEach(function(filterDate) {
fDate += "<tr>";
fDate += "<td>" + filterDate.firstname + "</td>";
fDate += "<td>" + filterDate.start + "</td>";
fDate += "<td>" + filterDate.end + "</td>";
fDate += "</tr>";
});
fDate += "</table>";
document.getElementById("demo1").innerHTML = fDate;
}
<body onload="filterDates()">
<select id="endDate" onchange="filterDates(this.value);">
<option label="All Years" value="All">All Years</option>
<option label="Past Years" value="Past">Past Years</option>
<option label="Present" value="Present">Present</option>
</select>
<p id="demo1"></p>
<body/>
Ключ - это фильтрация, которую я не хотел менять слишком сильно, поэтому я оставил то, что вы делаете, по большей части, за исключением того, что теперь он использует Array.filter и switch
для внутренних целей, чтобы знать, как фильтровать в зависимости от выбранной опции.