为每个用户分配一种颜色

Assign to each user a color

我目前正在创建网络聊天,每当聊天框中显示一条消息时,发送消息的用户就会显示并用颜色标识。我为每个用户创建一个 class 并使用上述函数为颜色样式分配一个值。

newHTML = '';

$.each(data, function(index, element) {

    $('.user_' + element.senderId).attr("style","color:" + randColor());

    newHTML = newHTML + '<div id="boxMsg"><b><span class="user_' + element.senderId + '">' 
                      + element.senderId + '</b></span></br>' + element.message + '&nbsp&nbsp<span class="dateMsg">' + dateTime.substring(11, 16) + '</span></div>';    

    });

$('#chatbox').append(newHTML);           
},

JSON 协议用于提取与聊天中显示的消息有关的所有信息。但它仍然不起作用,所有用户名都是黑色的。你知道我做错了什么吗?

提前感谢您的回复!

编辑:感谢@Evan,我解决了第一部分和分配随机颜色的功能。但是,只有第一位和第三位成员的聊天颜色发生了变化。其他人还是黑的。无论如何,我留下函数 randColor() 的代码。

function randColor(){
                var letters = '0123456789ABCDEF'.split('');
                var color = '#';
                for (var i = 0; i < 6; i++ ) {
                    color += letters[Math.floor(Math.random() * 16)];
                }
                return color;
            };  

EDIT.2:我已经更正了函数以更多地反映我正在处理的函数。

for (var i = 0; i <= nUsers.length; i++ )

应该是

for (var i = 0; i < 6; i++ )

形成十六进制颜色。它应该始终为 6(或者对于短的十六进制颜色为 3)。

尝试使用.attr("style",properties)

如果您需要更改背景颜色,请使用 属性 "background-color":

$('.user_' + element.senderId).attr("style","background-color:" + randColor());

或者,如果您需要更改字体颜色,请使用 属性 "color":

$('.user_' + element.senderId).attr("style","color:" + randColor());

您的 HTML-->

有误
var newHTML = '';
 newHTML = newHTML + '<div id="boxMsg"><b><span class="user_' + element.senderId + '">' + element.senderId + '</b></span></br>' + element.message + '&nbsp&nbsp<span class="dateMsg">' + dateTime.substring(11, 16) + '</span></div>';

$('#chatbox').append(newHTML); 

"bold" 标签在跨度之前关闭。

修复它 -->

newHTML = newHTML + '<div id="boxMsg"><b><span class="user_' + element.senderId + '">' + element.senderId + '</span></b></br>' + element.message + '&nbsp&nbsp<span class="dateMsg">' + dateTime.substring(11, 16) + '</span></div>';

除此之外,您可以在构建 HTML 时调用 randomColor,而不是在 jquery 之后调用它...(您不需要特殊的 class)-->

newHTML = newHTML + '<div id="boxMsg"><b><span style="color:'+randColor()+'">' + element.senderId + '</span></b></br>' + element.message + '&nbsp&nbsp<span class="dateMsg">' + dateTime.substring(11, 16) + '</span></div>';

我设法解决了这个问题并正确地为每个用户分配了一种颜色。这是最终代码的样子:

function randColor(){
                var letters = '0123456789ABCDEF'.split('');
                var color = '#';
                for (var i = 0; i < 6; i++ ) {
                    color += letters[Math.floor(Math.random() * 16)];
                }
                return color;
            };
            userColor = [];
            userColor.push(randColor());
            $('.user_' + element.senderId).css("color", userColor);     

            // Create box messages of the other users           
            var dateTime = element.timestamp;
            newHTML = '<div id="boxMsg"><b><span class="user_' + element.senderId +'" style="color:'+ userColor +'">'+ element.senderId + '</span></b></br>' 
                      + element.message + '&nbsp&nbsp<span class="dateMsg">' + dateTime.substring(11, 16) + '</span></div>';    

            $('#chatBox').append(newHTML);

我所做的是创建一个数组,将获得的颜色存储在其中,最后将此数组中的一个元素分配给每个用户的每个 class。感谢大家的回答!