如何在JavaScript中根据日期过滤HTML数据?
让我们期待我有一张有很多行的桌子。行数据来自服务器如何在JavaScript中根据日期过滤HTML数据?,javascript,date,filter,Javascript,Date,Filter,让我们期待我有一张有很多行的桌子。行数据来自服务器 <table> <tr data-date="${date}"> // let's assume this is from server <td>Code</td> <td>${date}</td> <td>Name</td> </tr> <tr data-date="
<table>
<tr data-date="${date}"> // let's assume this is from server
<td>Code</td>
<td>${date}</td>
<td>Name</td>
</tr>
<tr data-date="${date}>
<td>Code</td>
<td>${date}</td>
<td>Name</td>
</tr>
</table>
//让我们假设这是来自服务器的
代码
${date}
名称
我假设:
“日”是指今天的日期
“周”是指从本周的第一天到最后一天的日期范围
“月:指从当月第一天到最后一天的日期范围
如果今天是2020-07-02:
day将给出“2020-07-02”
本周将给出2020-06-29(如果周一是一周的第一天)到2020-07-05(如果周日是一周的最后一天)的范围
本月将给出2020-07-01至2020-07-31的范围
根据
更容易获得每月第一天和最后一天的范围:
let firstDayOfMonth = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
let lastDayOfMonth = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0);
您需要以某种方式标记包含日期的单元格:
<table id="mytab">
<tr>
<td>Code</td>
<td class="date">02-07-2020</td>
<td>Name</td>
</tr>
<tr>
<td>Code</td>
<td class="date">25-06-2020</td>
<td>Name</td>
</tr>
</table>
代码
02-07-2020
名称
代码
25-06-2020
名称
现在,当您有了按钮所需的所有日期后,只需从表格单元格中读取日期并检查哪些与范围匹配,然后隐藏其余的
var table = document.getElementById("mytab");
for (var i = 0, row; row = table.rows[i]; i++) {
for (var j = 0, col; col = row.cells[j]; j++) {
if (col.classList.contains("date")) {
let control_date = col.innerHTML.split('-');
control_date = new Date(control_date [2], control_date[1] , control_date[0]);
if (control_date == currentDate) {
//this cell date is todays date
}
if (control_date > firstDayOfCurrentWeek && control_date < lastDayOfCurentWeek) {
//this cell date is in this week date
}
if (control_date > firstDayOfMonth && control_date < lastDayOfMonth) {
//this cell date is in this monthdate
}
}
}
}
var table=document.getElementById(“mytab”);
for(变量i=0,行;行=表。行[i];i++){
for(var j=0,col;col=row.cells[j];j++){
if(col.classList.contains(“日期”)){
让control_date=col.innerHTML.split('-');
控制日期=新日期(控制日期[2],控制日期[1],控制日期[0]);
如果(控制日期==当前日期){
//此单元格日期是今天的日期
}
如果(控制日期>当前周的第一天和控制日期<当前周的最后一天){
//此单元格日期在本周日期中
}
如果(控制日期>每月第一天和控制日期<每月最后一天){
//这个单元格日期在这个月日
}
}
}
}
请注意,该日期可以匹配多个范围,例如,todays date将同时匹配today、wee和month当它被称为“在表中显示具有相应日期的元素”时,我假设这意味着存在一个表,即从服务器发送的某个表HTML,并存储为字符串(或变量)在某个有所有可能日期的地方,我也猜这些按钮是用来选择一个特定日期的,我想象着一个日历风格的应用程序,其中显示了一个当前日期,人们可以通过单击“周”按钮等来更改周,但如果这是其他的,请告诉我
无论如何,问题的重点是“如何根据javascript中的日期过滤HTML数据”,我假设“HTML数据”意味着根据某些元素内容的innerHTML值显示和隐藏某些HTML
为此,您需要从正在搜索的值开始。例如,让我们使用字符串“02-07-2020“,以这样或那样的方式生成,您有一个完整的日期表,我假设您从服务器收到此表的字符串并将其存储在JavaScript中,如果不是,我假设服务器将原始HTML发送回页面,您希望使用JavaScript过滤HTML表(又名删除所有与字符串不对应的行)当按下按钮时。无论哪种方式都应该相同
因此,假设有一个表,其中所有日期都已在HTML中,并且您希望“隐藏”(/我假设这意味着删除)所有内容与日期不一致的单元格,那么您有两个不同的选项
或者,您可以对不包含该值的所有单元格手动调用该方法(但随后您必须重新生成所有包含下一个值的单元格),或者您可以在每次按下按钮时使用JavaScript生成整个表,并且只生成您想要的单元格,或者生成最首选的选项(我想你无论如何都在问这个问题)是在周围tr
元素的样式中添加display:none
,唯一的问题是如何找到要过滤的特定数据,但这应该很简单
好的,我们将使用第三种方法,要做到这一点,我们只需要3个输入,我们需要我们要搜索的日
,周
,月(我假设,如评论中所述,day
表示完整日期,week
仅表示特定的一周,month
表示完整的一个月,因此每个月的包容性都不如最后一个月,因此我们还需要一个变量输入来告诉我们正在搜索哪一个)
基本上,我们只需要在函数中提供两个主要输入,一个开始日期和一个结束日期,如果没有结束日期,假设我们只寻找开始日期
所以我在美国,所以我习惯了美国日期,但从问题来看,它使用的是欧洲格式,在月的前一天,这将使我们使用内置的Date
API有点复杂,但它应该仍然可以,我们只需要手动创建自己的proto-Date系统来检查是否有一个字符串或者使用.split(-)
从字符串中提取天-周-月,并生成一个新字符串,或者与本机日期
API一起使用,但无论哪种方法都应该有效
好的,让我们开始:
doIt.onclick=()=>{
var startDate=dateStart.value,
endDate=dateEnd.value;
可排序(开始日期、结束日期)
};
功能排序通过表(开始、结束){
Array.apply(0,myTable.rows).forEach(x=>{
var cells=Array.apply(0,x.cells);
var secondCell=单元格[1]。innerText;
var isHidden=应避免(
第二单元,
开始,结束
);
如果(isHidden){
x、 style.display=“无”
}else if(x.style.display==“无”)
x、 style.display=“”;
})
函数应该被隐藏(
cellTxt,
开始
结束
) {
var parsedCell=myParse(cellTxt),
parsedStart=myParse(sta
<table id="mytab">
<tr>
<td>Code</td>
<td class="date">02-07-2020</td>
<td>Name</td>
</tr>
<tr>
<td>Code</td>
<td class="date">25-06-2020</td>
<td>Name</td>
</tr>
</table>
var table = document.getElementById("mytab");
for (var i = 0, row; row = table.rows[i]; i++) {
for (var j = 0, col; col = row.cells[j]; j++) {
if (col.classList.contains("date")) {
let control_date = col.innerHTML.split('-');
control_date = new Date(control_date [2], control_date[1] , control_date[0]);
if (control_date == currentDate) {
//this cell date is todays date
}
if (control_date > firstDayOfCurrentWeek && control_date < lastDayOfCurentWeek) {
//this cell date is in this week date
}
if (control_date > firstDayOfMonth && control_date < lastDayOfMonth) {
//this cell date is in this monthdate
}
}
}
}