遍历选择选项并删除

时间:2019-04-30 15:24:52

标签: javascript

如果选项不在给定时间内,我需要在遍历选项后删除它们。但是他们似乎仍然存在。

    var i;
    var dates = document.getElementById("event_date")
    for (i = 1; i < dates.options.length; i++) {

      var dateString = dates.options[i].value;
      var date = new Date(dateString)
      var timestamp = date.getTime();
      var anfangsdatum = new Date("2019-06-01 23:59:00").getTime();
      var enddatum = new Date("2019-07-01 23:59:00").getTime();

      if (anfangsdatum < timestamp < enddatum ) {
      // The selected time in summer
        dates.options[i].style.display = "block";
      } else if (timestamp > enddatum) {
        dates.options[i] = null;
      } else {
        dates.options.remove(i);
      }
   }

sample dateString = 2019-07-01 09:00

2 个答案:

答案 0 :(得分:0)

这是因为您的第一个条件anfangsdatum < timestamp < enddatum如果始终为true,那么就永远不会删除任何内容!

您的第一个if应该是anfangsdatum < timestamp && timestamp < enddatum

var timestamp = new Date();
var anfangsdatum = new Date("2019-06-01 23:59:00").getTime();
var enddatum = new Date("2019-07-01 23:59:00").getTime();

console.log(anfangsdatum < timestamp < enddatum);

// this evaluates to true or false
console.log(anfangsdatum < timestamp);

// no matter what you always get true in the end
console.log(true < timestamp < enddatum);
console.log(false < timestamp < enddatum);

答案 1 :(得分:0)

您的代码中有一些小错误。

for (i = 1; i < dates.options.length; i++)

您的循环从1开始-因为它是一个数组,所以您应该从0开始-除非出于某种原因要跳过第一个选项。

if (anfangsdatum < timestamp < enddatum )

这种比较没有意义,应该是:

if (anfangsdatum < timestamp && timestamp < enddatum ) 

此外,如果以上条件的计算结果为false,则该删除选项了。

   var i;
   var dates = document.getElementById("event_date")

   for (i = 0; i < dates.options.length; i++) {

     var dateString = dates.options[i].value;
     var date = new Date(dateString)
     var timestamp = date.getTime();
     var anfangsdatum = new Date("2019-06-01 23:59:00").getTime();
     var enddatum = new Date("2019-07-01 23:59:00").getTime();
     if (anfangsdatum < timestamp && timestamp < enddatum) {
       dates.options[i].style.display = "block";
     } else {
       dates.options.remove(i);
     }
   }
<select id="event_date">
  <option value="2019-07-01 09:00">2019-07-01 09:00</option>
  <option value="2018-07-01 09:00">2018-07-01 09:00</option>
</select>