如何动态改变元素的颜色?

Posted

技术标签:

【中文标题】如何动态改变元素的颜色?【英文标题】:How to dynamically change color of element? 【发布时间】:2012-03-30 06:02:10 【问题描述】:

如何使用变量更改元素的颜色?

假设我们有四个字符串(颜色)。我需要给每个类元素一个不同的,1,2,3,4,1,2,3...等等:

function pressLineColors() 

    var a = "#eee",
    b = "#123",
    c = "#fff",
    d = "#ae23e5";

     $('.pressLine').each(function (i) 
         //go througt each of this, and give them colors, so when new elements
        // appear, give them next color. 
     );

第一个元素应该有颜色a、第二个b、第三个c、第四个d和第五个一个,...

【问题讨论】:

【参考方案1】:

使用添加类

http://api.jquery.com/addClass/

http://api.jquery.com/css/

【讨论】:

【参考方案2】:
function pressLineColors() 

    //setup array of colors and a variable to store the current index
    var colors = ["#eee", "#123", "#fff", "#ae23e5"],
        curr   = 0;

    //loop through each of the selected elements
    $.each($('.pressLine'), function (index, element) 

        //change the color of this element
        $(this).css('color', colors[curr]);

        //increment the current index
        curr++;

        //if the next index is greater than then number of colors then reset to zero
        if (curr == colors.length) 
            curr = 0;
        
    );

这是一个演示:http://jsfiddle.net/SngJK/

更新

您也可以使用 cmets 中的建议来缩短代码:

function pressLineColors() 
    var colors = ["#eee", "#123", "#fff", "#ae23e5"],
        len    = colors.length;
    $.each($('.pressLine'), function (index, element) 
        $(this).css('color', colors[index % len]);
    );

这是一个演示:http://jsfiddle.net/SngJK/2/

更新

您也可以使用.css('color', function ()) 来遍历每个元素,返回您想要制作元素的颜色:

$('.pressLine').css('color', function (index, style) 
    return colors[index % len];
);

这是一个演示:http://jsfiddle.net/SngJK/4/

【讨论】:

@jgauffin 我回滚了,因为你删除了我解释代码的 cmets。 $.each() 的开销也比 .each() 少,所以我喜欢使用它。 只需使用colors[index % colors.length],就不需要currcurr++if 我想发布一个我不久前制作的 JSPerf 来演示循环的不同开销:jsperf.com/jquery-each-vs-for-loops/7 @Kyle:就是colors[index % colors.length]4 % 4 == 0 不要忘记您可以将函数参数传递给许多 jQuery 方法...$('.pressLine').css('color',function(i)return colors[i%colors.length];); ...编辑:看起来您刚刚添加了它。 :)【参考方案3】:

您需要将您的列表放入一个类似数组的对象中,然后通过索引访问;

function pressLineColors() 

var colors = [ a = "#eee",
b = "#123",
c = "#fff",
d = "#ae23e5"];

 $('.pressLine').each(function (i) 
     //go througt each of this, and give them colors, so when new elements
    // appear, give them next color. 

   $(this).css("color" , colors[i]);
 );

【讨论】:

是的,已编辑,Jasper 和 Kyle 的答案也更好,因为它们允许列表的大小和元素数组的长度 如果元素多于颜色?【参考方案4】:
function pressLineColors() 
  var a = ["#eee","#123","#fff","#ae23e5"];

  $('.pressLine').each(function (i, ele) 
    $(ele).css("color", a[i % a.length]);
  );

【讨论】:

【参考方案5】:

将这些颜色放在一个数组中

function pressLineColors() 

a = new Array();

a[0] = "#eee",
a[1] = "#123",
a[2] = "#fff",
a[3] = "#ae23e5";

var c = 0;
var size = a.length;

 $('.pressLine').each(function (i) 

      this.style.color = a[c];
      c++;
      if(c > size) c = 0;
  );

【讨论】:

【参考方案6】:

创建一个变量来跟踪,一个单独的函数将允许您稍后添加元素并保持跟踪

/* colors in indexable array*/
var colors=["#eee", "#123","#fff","#ae23e5"];

var counter=0;
$('.pressLine').each(function () 
         $(this).css('color', colors[nextColorIndex()]);

);

function nextColorIndex()
    var ctr=counter;
         counter=(++counter <colors.length) ? counter++ :0
         return ctr;

【讨论】:

你将计数器增加两次! counter=(++counter &lt; colors.length) ? counter :0

以上是关于如何动态改变元素的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用css改变某个元素的文本颜色

如何改变 <hr/> 元素的颜色?

使用纯CSS,如何改变<option>元素选中状态的文字颜色

如何使用jquery检查元素的背景颜色

如何使用hover点击一个元素使另一个颜色变色

如何使用hover点击一个元素使另一个颜色变色