javascript:选择随机项(只要尚未显示)

javascript:选择随机项(只要尚未显示),javascript,jquery,class,random,Javascript,Jquery,Class,Random,我有一张个人资料图片,我想在单击后更改。我已经创建了一些类来根据应用的类更改这个元素的背景图像,但是我不确定如何进行比较 我知道如何创建类数组以及如何选择一个随机类,我只是不知道如何判断刚刚选择的随机类是否也是已经应用的类 var classes = ['first', 'second', 'third', 'fourth', 'fifth']; var randPick = Math.floor(Math.random()*classes.length); var currentClass =

我有一张个人资料图片,我想在单击后更改。我已经创建了一些类来根据应用的类更改这个元素的背景图像,但是我不确定如何进行比较

我知道如何创建类数组以及如何选择一个随机类,我只是不知道如何判断刚刚选择的随机类是否也是已经应用的类

var classes = ['first', 'second', 'third', 'fourth', 'fifth'];
var randPick = Math.floor(Math.random()*classes.length);
var currentClass = $(this).attr('class');
$(this).removeClass(currentClass);
$(this).addClass(classes[randPick]);
如何应用
$(this).addClass(classes[randPick])classes[randPick]
不是
$(此).attr('class')

中当前显示的类时,才使用代码>替换此行:

$(this).addClass(classes[randPick]);
为此:

$(this).addClass(classes.splice(randPick, 1)[0]);
如果将
classes
设为全局变量,则每次将类添加到元素时,它都会从列表中删除,不再被拾取。

这样如何:

if(!$(this).hasClass(currentClass))
$(this).addClass(classes[randPick]);
这将从类的
n-1
中随机选择,然后交换随机选取,使其不会连续使用两次。(但它可以再次使用,只是不能连续使用两次。)

这就是你想要的,对吗?永远不要让某个内容在一行中显示两次/“已应用的类?”

如果您希望所有类以随机顺序显示,然后重新开始,再次以不同的随机顺序显示,那么您可以使用另一个答案,在清空类变量后,简单地重新设置类变量,如下所示:

originalClases = ['first', ..., 'fifth'];
if (classes.length == 0) classes = originalClasses;
/* followed by var randPick and the rest of the suggested code */

if(currentClass!==classes[randPick])$(this.addClass(classes[randPick])不起作用?我的问题可能措辞有点含糊。我可以进行比较,但setting
var randPick
只会在设置时运行一次数学函数。因此,如果比较结果为真,那么我想我必须重新声明
var randPick
以重新运行数学函数?这非常有效。尽管如此,有没有一种方法可以让它在循环使用所有可用的数组项后重复,或者在这个过程中数组被破坏了?是的,这正是我所需要的。我非常不擅长简洁地表达问题,以至于人们完全理解我的想法。然而,通过这个解决方案,我注意到它似乎每隔一段时间就会重复同一个类。我想也许jQuery没有捕捉到click()事件,但看起来确实如此。就改变课程而言,似乎没有任何特定的成功/失败比率。大约每20次点击,它就会显示一次相同的类。这是预期的吗?是的,同一个类可能会再次显示。只是不连续两次。如果你不想再出现同样的课堂表演,那么就用我答案的第二部分和艾略特的拼接答案。这将一次销毁一个类数组,然后用原始的完整类集再次替换它,从而再次启动整个随机过程。
originalClases = ['first', ..., 'fifth'];
if (classes.length == 0) classes = originalClasses;
/* followed by var randPick and the rest of the suggested code */