【问题标题】:javascript multiple AND conditions in IF statement inside for loop javascriptjavascript for循环中的IF语句中的多个AND条件
【发布时间】:2017-06-27 03:21:42
【问题描述】:

我觉得自己很愚蠢,因为我坚持基本的。我有三组包含段落的类,我想根据日期更改每个类的背景颜色(使用 New Dat.getDay()。

我不知道如何正确混合每组类的 for 循环和 if 语句。我想这很简单,但我想念它!

function changecolor() {
  var d = new Date();
  var n = d.getDay();
  var weekda = document.getElementsByClassName('weekdays');
  var sat = document.getElementsByClassName('saturday');
  var dom = document.getElementsByClassName('sun-fer');
  for (var i = 0; i < weekda.length && i < sat.length && i < dom.length; i++)
    if (n > 0 || n < 6) {
      weekda[i].setAttribute("style", "background-color:#0091ea;color:white;");
    }
  else if (n == 6) {
    sat[i].setAttribute("style", "background-color:#0091ea;color:white;");
  } else {
    dom[i].setAttribute("style", "background-color:#0091ea;color:white;");
  }
}
}
changecolor();

【问题讨论】:

  • 似乎 n &gt; 0 || n &lt; 6 应该是 n &gt; 0 &amp;&amp; n &lt; 6 ... 因为 每个 数字要么大于零或小于 6(|| 是 OR,&& 是 AND)
  • 多个for循环终止条件看起来很麻烦
  • 非常感谢@JaromandaX! :)

标签: javascript for-loop if-statement


【解决方案1】:

您需要对条件进行分组。阅读更多关于Operator precedence

 for (var i = 0;( (i < weekda.length) && (i < sat.length) && (i < dom.length)); i++){
   // your code

 }

【讨论】:

  • 但是...&lt; 的优先级已经高于&amp;&amp;,那么加括号有什么变化呢?
  • 好问题。括号是否使人类读者更容易直观地解析多重条件(?)
【解决方案2】:

部分问题可能是您对所有三个选项都有background-color:#0091ea;color:white;。因此,您可能看不到任何变化。

就我个人而言,我会稍微分解一下,使其更灵活,更易于阅读(和维护)。例如:

function changecolor() {
    var d = new Date();
    var e = null;
    var s = null;
    switch(d.getDay()) {
        case 6:
            e = document.getElementsByClassName('saturday');
            s = "background-color:#0091ea;color:white;";
            break;
        case 0:
            e = document.getElementsByClassName('sun-fer');
            s = "background-color:#0091ea;color:green;";
            break;
        default:
            e = document.getElementsByClassName('weekdays');
            s = "background-color:#0091ea;color:blue;";
    }
    // now update the color
    updateItem(e,s);
}

function updateItem(e,s) {
    var i, max = e.length;
    for(i=0;i<max;i++) {
        e[i].setAttribute("style",s);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-20
    • 2018-04-12
    • 1970-01-01
    • 2018-05-27
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    相关资源
    最近更新 更多