アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 1人
プロフィール
スポンジボブ

2011年02月20日

jqueryでランダム化

jqueryは便利ですが、今一つ使い方がピンと来ていないので覚書です。

<div id="jobPickUpHome" class="entryFrame">
<div class="entryTop">-</div>
<div class="entryBody">
<div class="jobHome">
<div class="entryTitle">
<h3>テスト1</h3>
</div>
<dl>
<dt>テストタイトル1</dt>
<dd>
テスト1の内容
</dd>
</dl>
</div>
<div class="jobHome jobHomeRight">
<div class="entryTitle">
<h3>テスト2</h3>
</div>
<dl>
<dt>テストタイトル2</dt>
<dd>
テスト2の内容
</dd>
</dl>
</div>
</div>
<div class="entryBody">
<div class="jobHome">
<div class="entryTitle">
<h3>テスト3</h3>
</div>
<dl>
<dt>テストタイトル3</dt>
<dd>
テスト3の内容
</dd>
</dl>
</div>
<div class="jobHome jobHomeRight">
<div class="entryTitle">
<h3>テスト4</h3>
</div>
<dl>
<dt>テストタイトル4</dt>
<dd>
テスト4の内容
</dd>
</dl>
</div>
</div>
<div class="entryBody">
<div class="jobHome">
<div class="entryTitle">
<h3>テスト5</h3>
</div>
<dl>
<dt>テストタイトル5</dt>
<dd>
テスト5の内容
</dd>
</dl>
</div>
<div class="jobHome jobHomeRight">
<div class="entryTitle">
<h3>テスト6</h3>
</div>
<dl>
<dt>テストタイトル6</dt>
<dd>
テスト6の内容
</dd>
</dl>
</div>
</div>
<div class="entryBottom">-</div>
</div>

というhtmlをシャッフルして表示する場合を考えます。

jquery.shuffle.jsに以下を追加します。
------------------------------------------
$(document).ready(function(){
$('div.jobHome:odd').removeClass('jobHomeRight');
$("div.jobHome").unwrap();
$("div.jobHome").wrapAll('<div id=\"jobPickupShuffle\"></div>');

// ピックアップをシャッフル
$('#jobPickupShuffle').shuffle();

var classnumber = '';
$("div.jobHome").each(function(i){
classnumber = Math.floor(i/2);
$(this).addClass("class" + classnumber);
});

for(i = 0; i < classnumber+1; i++){
$("div.class" + i).wrapAll('<div class=\"entryBody\">');
$("div.jobHome").removeClass("class" + i);
};

$('div.jobHome:odd').addClass('jobHomeRight');
});
------------------------------------------

【解説】
このソースは

#jobPickUpHome
div.entryTop
div.entryBody
div.jobHome
div.jobHome jobHomeRight
div.entryBody
div.jobHome
div.jobHome jobHomeRight
div.entryBody
div.jobHome
div.jobHome jobHomeRight
div.entryBottom

という構造をしています。
シャッフルしたいのは、各div.jobHome要素です。
シャッフルにはjquery.shuffle.jsを使います。
このjqueryを使うために、シャッフルしたい要素を同じ形の記述にし、シャッフルし、元の構造に戻すという作業をjqueryでやります。



1.div.jobHomeのクラス:jobHomeRightを削除
$('div.jobHome:odd').removeClass('jobHomeRight');

2.2つの要素を囲んでいるdiv.dntryBodyを削除
$("div.jobHome").unwrap();

3.シャッフルする要素を指定するために、div.jobHomeを要素で囲む
div.jobHomeの要素すべてを<div #jobPickupShuffle></div>で囲みます。
$("div.jobHome").wrapAll('<div id=\"jobPickupShuffle\"></div>');

4.シャッフルします。
$('#jobPickupShuffle').shuffle();

5.もとの構造に戻すために、上から2つずつの組にするようクラスを付けます。
var classnumber = '';
$("div.jobHome").each(function(i){
classnumber = Math.floor(i/2);
$(this).addClass("class" + classnumber);
});

6.クラス名ごとにdiv.entryBodyで囲みます。
for(i = 0; i < classnumber+1; i++){
$("div.class" + i).wrapAll('<div class=\"entryBody\">');
$("div.jobHome").removeClass("class" + i);
};

7.もとあったクラスを付け直します。
$('div.jobHome:odd').addClass('jobHomeRight');


書いてみたら簡単なのですが、これができるまでにどれだけの時間を費やしたか…

同じカテゴリー(jquery)の記事
 jqueryの参考に (2011-05-20 11:36)
Posted by スポンジボブ at 12:32│Comments(0)jquery
※このブログではブログの持ち主が承認した後、コメントが反映される設定です。
コメントフォーム
上の画像に書かれている文字を入力して下さい
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。