2013-03-31 2 views
0

Как было предложено многими, я принял их совет и реформировал мой вопрос. Я достал много кода и теперь показываю минимальный минимум. Надеюсь, этого достаточно и достаточно ясно, чтобы снова открыть мой вопрос.Случайный порядок в классе

У меня есть следующая скрипка: http://jsfiddle.net/mauricederegt/vNpYe/5/

со следующим HTML:

<div id="main" tabindex="1"> 
      <div class="tile tile1" block-id="1" style-id="1" style="left:0px; top:0px"></div> 
      <div class="tile tile3" block-id="2" style-id="2" style="left:100px; top:0px"></div> 
      <div class="tile tile1" block-id="3" style-id="1" style="left:200px; top:0px"></div> 
      <div class="tile tile2" block-id="4" style-id="2" style="left:350px; top:0px"></div> 
      <div class="tile tile2" block-id="5" style-id="2" style="left:0px; top:100px"></div> 
      <div class="tile tile1" block-id="6" style-id="1" style="left:100px; top:100px"></div> 
</div> 

Я пытаюсь рандомизации порядок выключения классе Div в. Так что только часть class: class="tile tile1", все остальные элементы div должны оставаться такими, как есть.

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

<div id="main" tabindex="1"> 
       <div class="tile tile3" block-id="1" style-id="1" style="left:0px; top:0px"></div> 
       <div class="tile tile2" block-id="2" style-id="2" style="left:100px; top:0px"></div> 
       <div class="tile tile1" block-id="3" style-id="1" style="left:200px; top:0px"></div> 
       <div class="tile tile2" block-id="4" style-id="2" style="left:350px; top:0px"></div> 
       <div class="tile tile1" block-id="5" style-id="2" style="left:0px; top:100px"></div> 
       <div class="tile tile1" block-id="6" style-id="1" style="left:100px; top:100px"></div> 
    </div> 

Как я могу получить классы в Div для отображения в случайном порядке?

Надеюсь, теперь вопрос более ясен.

Большое спасибо

+1

, что это смешное количество кода для рассмотрения в демо , Тем более, что вы не определили, что означает «стиль тасования» или что означает уровень или уровень в контексте демонстрации. Демонстрация должна быть уменьшена, чтобы представить только достаточно кода, чтобы представить проблему, а не целое приложение. Конечно, вы можете удалить большую часть кода рендеринга и заменить статическим html, только с достаточным количеством скриптов, чтобы справиться с тем, что вы пытаетесь сделать. – charlietfl

+0

Я не согласен с количеством кода. Я попробовал это для дополнительной поддержки. Удаление его или комментарии в нем сделают вещи более неопределенными. Тем не менее я нашел письменную ошибку. Я исправляю класс div, а не стиль. Исправлено это и добавлен дополнительный пример HTML – Maurice

+1

@Maurice: Если есть определенное действие, которое вы хотели бы узнать, как это сделать в jQuery, укажите простейшую возможную версию проблемы. Представьте, что вы учитель в первый день начального компьютерного класса. Как вы представляете его ученикам, чтобы они точно понимали, в чем суть проблемы (прежде чем спрашивать их или обучать их решению основной проблемы такого рода)? Вот как задать вопросы в Stackoverflow. Изучите проблему, пока вы не поймете ее достаточно хорошо, чтобы уменьшить ее до ее простейшей формы. –

ответ

1

Во-первых, вам нужен массив классов плитки.

var tiles = [], 
tile_re = /tile(\d+)/; 

$('.tile').each(function(i) { 
    tiles[i] = this.className.match(tile_re)[0]; 
}); 

Затем нужно перетасовать массив классов:

function shuffle(a) 
{ 
    var t; 

    for (var i = a.length - 1; i > 0; --i) { 
    var p = Math.floor(Math.random() * (i + 1)); 
    if (p !== i) { 
     t = a[i]; 
     a[i] = a[p]; 
     a[p] = t; 
    } 
    } 
} 

shuffle(tiles); 

Наконец, вы сливаться результаты обратно:

$('.tile').each(function(i) { 
    this.className = 'tile ' + tiles[i]; 
}); 
+0

Спасибо, что работает отлично. Я сделал скрипку, если другие захотят увидеть ее в действии: http://jsfiddle.net/mauricederegt/EFCex/ – Maurice

Смежные вопросы