将addClass(pref random)应用于具有相同类的最多2个div而不是具有相同类的所有

时间:2013-04-22 19:12:17

标签: javascript jquery html random addclass

我有以下功能:

$(".schedule").each(function () {
    var cls = this.className.match(/schedule-\d+/);
    if (cls.length === 0) return;

    var els = $(".schedule." + cls); 
    if (els.not(this).length > 0) {
        els.addClass("someClass");        
    }
});

它为具有相同类的div添加了一个类(.someClass),将div变为红色。如this fiddle所示,它有效。我想将此someClass类随机添加到具有相同类的最多2个div。

示例(ps:div类的顺序是随机生成的,它们不仅限于A,B,C和D.这个小提琴中的顺序和类名只是一个例子):

我们有A,B,C,A,C,D,A。

我想要随机的2个div,同一个班级变成红色,所以:

  1. A和(第二)A是红色OR
  2. A和(第三)A是红色OR
  3. (秒)A和(第三)A是红色OR
  4. C和C为红色
  5. 如果这非常复杂,我也会满足于第一次找到的比赛。所以:

    1. A和(第二个)A是红色
    2. 希望有人能提供帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

A和(第二个)A可以使用以下方式选择:

$('.a:eq(0), .a:eq(1)').addClass('someClass');

A和(第三)A将是:

$('.a:eq(0), .a:eq(2)').addClass('someClass');

同样,您也可以获得其他组合。这假设组合的总数是您在问题中指定的。


好的,要选择要操作的给定类的2个随机元素,您可以执行以下操作:

// total number of elements with class (.A, .B, .C etc.)
var n = $('.yourClass').length;

// get 2 indices randomly
var ids = [];
while(ids.length < 2) {
   var r = Math.floor(Math.random() * n);
   if(ids.indexOf(r) == -1) {
      ids.push(r);
   }
}

// select the 2 elements picked randomly
var sel = $('.yourClass:eq('+ids[0]+'), .yourClass:eq('+ids[1]+')');

// apply the class
sel.addClass('someClass');