Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中根据日期过滤HTML数据?_Javascript_Date_Filter - Fatal编程技术网

如何在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
            }
    
        }
       }  
    }