循环通过td

时间:2016-05-19 15:38:46

标签: javascript html css

我知道有DRY原则,我想了解在这种情况下使用它的最佳方法是什么:

我正在做一个项目,我必须根据一天(天数不一致)为每个原始颜色着色。 但关于td' s: 在每个原始中有3个td。 我拿了td元素并手动编写了if,并且每次都将td添加到td的数组中。 什么是接近它的最佳方式?

我的代码:

var date = new Date();
var day = date.getDate();
var month = date.getMonth();
var td = document.getElementsByTagName("td");

if (day === 4 && month === 5) {
  td[3].style.background = "yellow";
  td[3].style.color = "black";
} else if (day === 6 && month === 5) {
  td[6].style.background = "yellow";
  td[6].style.color = "black";
} else if (day === 8 && month === 5) {
  td[9].style.background = "yellow";
  td[9].style.color = "black";
} else if (day === 13 && month === 4) {
  td[12].style.background = "yellow";
  td[12].style.color = "black";
}

2 个答案:

答案 0 :(得分:2)

我会申请一个课程,这样可以节省少量的重写费用。

CSS

.highlighted{
    background: yellow; 
    color: black;
}

的Javascript

if (day === 4 && month === 5) {
  td[3].classList.add("highlighted")
}
else if(day === 6 && month === 5) {
  td[6].classList.add("highlighted")
}
else if(day === 8 && month === 5) {
  td[9].classList.add("highlighted")
}
else if(day === 13 && month === 4) {
  td[12].classList.add("highlighted")
}

如果当天和索引之间存在关联,那么您可以将javascript降低到类似...

if ((day === 4 && month === 5) || (day === 6 && month === 5) || (day === 8 && month === 5) || (day === 13 && month === 4) {
  td[day].classList.add("highlighted")
}

答案 1 :(得分:2)

试试这个:

//var days = [];
//days['5/4']=3, days['5/6']=6, days['5/8']=9, days['4/13']=12;
var days={'5/4': 3, '5/6': 6, '5/8': 9, '4/13': 12}; //this is more elegant, thanks to @Rick
var date = new Date();
var day = date.getDate();
var month = date.getMonth();
var td = document.getElementsByTagName("td");
if(!!days[month + '/' + day]) //true if exist 
    td[days[month + '/' + day]].classList.add("highlighted");