0

我在下面有这个脚本,我希望它遍历每个锚点并给出背景

$c = ['85CC4C', 'D1FFCD', 'FF8D9D', '8A5949', 'CC8066'];
$('a').each(function(i){
$(this).css({'background':'#'+$c[i], 'color':getTintedColor($c[i], -55)});
});

为什么它在通过数组颜色后停止?我希望它重复 5 种颜色。

4

3 回答 3

2

如果要循环显示颜色,请尝试$c[i % 5]代替$c[i]

$c = ['85CC4C', 'D1FFCD', 'FF8D9D', '8A5949', 'CC8066'];
$('a').each(function(i){
    $(this).css({'background':'#'+$c[i % 5], 'color':getTintedColor($c[i % 5], -55)});
});

each()循环内部,i变量是每个锚标记的索引。但是,您的颜色数组只有 5 种颜色。Usingi % 5将始终给出一个介于0和之间的数字4,因此始终是颜色数组中的有效索引。

于 2013-06-04T01:38:03.433 回答
1

为什么它在通过数组颜色后停止?

因为$c[i]then 产生undefined, 而不是从零开始索引。您可以使用模运算符来执行此操作:

$('a').each(function(i){
    var col = $c[i % $c.length];
    $(this).css({
        background: '#'+col,
        color: getTintedColor(col, -55)
    });
});
于 2013-06-04T01:42:34.590 回答
0

因为如果i 值大于数组的长度,$c[i] 是未定义的..

数组有 5 个项目,您正在尝试分配anchor6 个项目的值。

所以当长度大于数组时需要重新设置值(需要使用模运算符)。像这样的东西

$c = ['85CC4C', 'D1FFCD', 'FF8D9D', '8A5949', 'CC8066'];
$('a').each(function (i) {
    $(this).css({
        'background': '#' + $c[i % $c.length],
        'color': getTintedColor($c[i % $c.length], -55)
    });
});

检查小提琴

于 2013-06-04T01:38:15.370 回答