【问题标题】:Loop through background colors (for loop)循环遍历背景颜色(for循环)
【发布时间】:2013-06-21 01:25:03
【问题描述】:

我正在尝试学习 Javascript 和 DOM。我想使用 for 循环为我的文本创建替代背景颜色。

HTML:

<p> one </p>
<p> two </p>
<p> three </p>
<p> four </p>
<p> five </p>

Javascript:

var p = document.getElementByTagName(p);
var colors = ["red","green"];

 for(var i=0 ; i < p.length; i++) {
     p.style.background = colors;

 }

这里是小提琴:http://jsfiddle.net/tmyie/LMdXn/36/

任何帮助都会很棒:)

【问题讨论】:

  • 那么,您现在的代码有什么问题?它什么都不做吗?犯错?让你的电脑崩溃?让飞猴从天上掉下来?给你免费的华夫饼?请澄清。

标签: javascript dom loops for-loop


【解决方案1】:

尝试类似:

for(var i=0 ; i < p.length; i++) {
     p[i].style.background = colors[i%2];

 }

i%2 表示余数或i(循环变量)除以 2。您所做的是告诉它查看交替的位置。

Here is a working fiddle

值得一提,在新浏览器中you don't need JavaScript to do this (CSS is enough)

Here is a nice tutorial on arrays on MDN

【讨论】:

  • 太好了。我可以使用 colors.push();让颜色填充所有 p 元素?
  • 我看不到 colors.push() 在这里为您做了什么(它向颜色数组添加了一个元素),但如果您的意思是在创建后将项目添加到该数组的末尾,那么是的,你可以。
  • 对不起。我的意思是因为我的数组中只有两种颜色,但有五个段落。与其在数组中创建更多颜色,我可以只使用两个,但仍然为所有五个

    标签着色吗?

  • 是的,这就是模运算符在这里所做的(%)。这是“除法余数”。 msdn.microsoft.com/en-us/library/h6zfzfy7(v=vs.80).aspx
【解决方案2】:

看看这个jsFiddle

您有一些错误...主要是忘记了[i] 中的p[i],还有复数形式的getElementsByTagName。我为颜色数组添加了更多值,因此它不会超出范围(您可以也使用% (mod),如colors[i % colors.length])

【讨论】:

  • 谢谢。 p[i].style.background 怎么在 p 后面有一个 [i]?
  • p 是一个包含所有&lt;p&gt; 元素的数组,你只想改变当前元素的背景.. p[i] 是当前元素
  • 是的,看看我的更新:colors[i % colors.length] 这样你就不会超出颜色数组的范围......(你可能有更多的&lt;p&gt; 元素而不是颜色)..updated jsFiddle
  • 太好了。我从来没有在数组中使用过除 [i]、[1]、[2] 等之外的任何东西,我得查一下这意味着什么:)
  • 当您执行for(i=0;i&lt;p.length;i++) 时,您的基本意思是:对于p 中的每个数组单元格,i 持有当前密钥-然后执行p.length(在我们的例子中为5)次。如果对你有帮助,请接受我的回答..
【解决方案3】:

这里有一个清晰而简单的方法来实现你想要的,没有多余的不必要的功能混乱:

var paragraphs = document.getElementsByTagName("p");
var colors = ["#FF0000", "#00FF00", "#0000FF"];
for(var i = 0; i < paragraphs.length; i++) {
    paragraphs[i].style.backgroundColor = colors[i % colors.length];
}

它所做的只是:

  1. 获取页面上的应用&lt;p&gt;元素数组
  2. 创建所有颜色的数组(在本例中为红色、绿色和蓝色)
  3. 为数组中的每个元素赋予下一种颜色

它还确保它不会返回带有i % colors.length 部分的undefined 颜色,这是您应该始终考虑的事情。

如果所有段落都在同一个容器中,您可以在 CSS 中这样做:

#container p:nth-child(3n+1)
{
    background-color: #F00;
}
#container p:nth-child(3n+2)
{
    background-color: #0F0;
}
#container p:nth-child(3n+3)
{
    background-color: #00F;
}

【讨论】:

  • 谢谢。是的,我使用了一个循环,因此理论上它可以达到无穷大。我是否总是使用 % 余数来实现无穷大,数组中只有两个项目?
  • 你不能达到无穷大,除非你有一个循环检查一个从未达到的条件,或者一个方法在没有合理返回的情况下调用自己。在此示例中,%(模数)运算符使您永远不会用完颜色来分配给 &lt;p&gt;,方法是在每第三次迭代的开头将值换行并重新开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
相关资源
最近更新 更多