2013-04-22 2 views
0

У меня есть следующие функции:Применить addClass (прив случайным образом) макс 2 див с тем же классом вместо того, чтобы все с тем же классом

$(".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");   
    } 
}); 

Это добавляет класс (.someClass) для дивы, которые имеют те же класс, поворачивая div red. Как видно из this fiddle, он работает. Я бы хотел добавить этот класс someClass случайным образом в max 2 divs с тем же классом.

Пример (пс: Порядок классов DIV генерируются случайным образом, и они не ограничиваются только A, B, C и D. Этот порядок и имена классов в скрипке лишь в качестве примера):

Мы имеем а, в, с, а, с, D, А.

хочет случайным образом 2 див с тем же классом становятся красным так:

  1. а и (второй) а представляет собой красное или
  2. A и (третий) A красный OR
  3. (второй) А и (третий) А красный ИЛИ
  4. C и C красный

Если это очень сложно, я улажу для первого найденного матча тоже. Итак:

  1. А и (второй) А красный

Надежда кто-то может помочь, спасибо!

+0

Возможная ссылка дубликат действительно говорит о случайном выборе, но не ограничивая его на пг? – Maurice

ответ

1

А и (второй) А может быть выбран с помощью:

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

А и (третий) А будет иметь:

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

Кроме того, вы можете получить другие комбинации также. Предполагается, что общее количество комбо - это то, что вы указали в вопросе.


Ok, чтобы выбрать 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'); 
+0

_ Я хотел бы добавить этот класс someClass ** случайным образом ** до max 2 divs_ – Andreas

+0

Действительно ИЛИ к первому найденному совпадению. Также классы не фиксированы (ни в порядке, ни в именах). Тем не менее, спасибо за попытку помочь! – Maurice

+0

@Maurice - Смотрите мое редактирование. Добавили логику, чтобы помочь вам получить то, что вам нужно. – techfoobar