jQuery Ajax通信でランダムにhtmlファイルを表示する方法

このQ&Aのポイント
  • Ajax通信で別htmlファイルをランダムに読み込む方法について教えてください。
  • 要素内の表示場所をランダムに変えることができる方法を教えてください。
  • div要素にランダムにhtmlファイルを読み込む方法を教えてください。
回答を見る
  • ベストアンサー

jQuery Ajax通信をランダムで表示

Ajax通信で別htmlファイルを読み込みたいと考えています。 それぞれ読み込むファイルは、a.html、b.html、c.html、d.htmlとあります。 読み込む先(index.html)の以下div要素内に、 上記htmlを読み込みたいと考えています。 <div id="01"></div> <div id="02"></div> <div id="03"></div> <div id="04"></div> 本来ならAjax通信で以下のように出来るかと思います。 $(function(){  $('#01').load('a.html');  $('#02').load('b.html');  $('#03').load('c.html');  $('#04').load('d.html'); }); しかし、div要素内の表示をランダムにしたいのです。 例)id="01"のところに、b.htmlだったり、d.htmlだったりという感じです。  ロードする度にコンテンツの表示場所が変化するイメージです。 ランダムというところが、どのように対処したらよいのか、手も足も出ません。 どなたか詳しい方、ご教授いただけたら助かります。 何卒、何卒、宜しくお願いいたします。

  • AJAX
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

a、b、c、dの配列を作っておいて、シャッフルして、順にdivに表示するとか… 逆に、表示の対象をシャッフルしても同様ですけど。 いずれにしろ、どちらかを混ぜればよいのではないでしょうか。 シャッフルの具体的な方法に関しては、検索すればいろいろと見つかるはずです。

mc0816
質問者

お礼

ご回答をありがとうございます。 そうか…配列を作るのか。 そしてそれをシャッフルするんですね。 シャッフルはMath.random()というものを使って、 実装して期待どおりにできました。 助かりました。 本当に本当にありがとうございました。

関連するQ&A

  • jQueryを使ってランダムに表示

    jQueryを使って5つのボックス要素を、ランダムに3つ表示させています。 現在はページを読み込むたびに表示を切り替えていますが、これを「一定時間で表示を切り替え」に変更する事は可能でしょうか? できればjsのみの修正でできれば良いのですが…。 どなたかお助けください。よろしくお願いいたします。 jsとhtmlは以下のようにしています。 jQuery(function($) { $.fn.extend({ randomdisplay : function(num) { return this.each(function() { var chn = $(this).children().hide().length; for(var i = 0; i < num && i < chn; i++) { var r = parseInt(Math.random() * (chn - i)) + i; $(this).children().eq(r).show().prependTo($(this)); } }); } }); $(function(){ $("[randomdisplay]").each(function() { $(this).randomdisplay($(this).attr("randomdisplay")); }); }); }); <div randomdisplay="3"> <div id="box">ランダム1</div> <div id="box">ランダム2</div> <div id="box">ランダム3</div> <div id="box">ランダム4</div> <div id="box">ランダム5</div> </div>

  • jQueryのAjaxで通信の途中結果を取得したい

    jqueryのajaxを使って通信先のphpが発行するhtmlを受信して受信側の<div id="data"></div>に 表示させているのですが、通信先のphpが処理して生成したhtmlの途中結果を受信して 表示させるにはどのようにすれば良いのでしょうか? 例えば通信先のphpを <?php ob_start(); for ( $i = 1; $i <= 100000; $i++ ) {  if ($i % 100 == 0) {   echo "■";  }  @ob_flush();  @flush();  usleep(30000); } ?> このようにして受信側を <div id="data">■■■</div> というようにプログレスバーみたいに次々と■を増やしていきたいのですが、実行してみると最終結果の <div id="data">■■■■■■■■■■■■■■■■■■■■■■■■(…省略)</div> だけが出力されてしまいます。 どのようにすれば良いのか教えて頂きたいです。 どうぞよろしくお願い致します。

    • ベストアンサー
    • AJAX
  • Ajaxを使った読み込みができない

    ●質問の主旨 Ajax(非同期通信)を使って、 ブラウザ上でテキストファイルの読み込みを させたいのですが、できません。 Ajaxにお詳しい方、ご指導願います。 ●質問の補足 HTML5とjqueryの技術を使って、 テキストファイルの中身(Hello,World)の 読み込みをさせたいと考えております。 参考サイトにもとづいてやってますが、 画像の表示ができません。 表示させるためにはどうしたら良いでしょうか? ●コード <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>jQueryの練習</title> <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script> </head> <body> <h1>jQueryの練習</h1> <div id="main"></div> <input type="button" id="kick_ajax" value="Ajax!"> <script> $(function() { $('#kick_ajax').click(function() { $('#main').load('contents.txt', function() { alert('読み込み終了!'); }); }); }); </script> </body> </html> ●テキストファイルのファイル名 contents.txt ●参考サイト(ドットインストール) http://dotinstall.com/lessons/basic_jquery/519

    • ベストアンサー
    • AJAX
  • jQueryを利用してのランダム表示について

    jQueryを学習しています。学習し始めてから1ヵ月程度になります。 途中まで考えたのですが、次にどうしたらいいか検討がつきません。 基本的なこともあまりわかっていない状況での質問で申し訳ありません。 どなたかご教授のほどお願いいたします。 考えていることは以下になります。 ・Nextのボタンを押すとランダムでclass=boxの内容を1つ表示したい ・再度、Nextのボタンを押すと表示されていたものが消えて、別のclass=boxを表示したい //////////////// スクリプト //////////////// <script type="text/javascript"> var a = ".box" $(function(){ $(a).hide(); }); $(function(){ $("#tugi").click( function(){ var items = $(a).get().sort(function() { return Math.round(Math.random()) ; }).slice(0, 1); $(items).show(); }); }); $(function(){ $(".answer").hide(); }); $(function(){ $(".kirikae").click( function(){ $(this).next().toggle(); }); }); </script> //////////////// HTML //////////////// <body> <div id="wrap"> <input type="button" value="Next"id="tugi"/> <div id="1" class="box"> 問題1 <br /> <input type="button"value="答えの表示" class="kirikae"/> <div class="answer"> 答え1 <!-- /div .answer --></div> <!-- /div#1 --></div> <div id="2" class="box"> 問題2<br /> <input type="button"value="答えの表示" class="kirikae"/> <div class="answer"> 答え2 <!-- /div .answer --></div> <!-- /div#2 --></div> <div id="3" class="box"> 問題3<br /> <input type="button"value="答えの表示" class="kirikae"/> <div class="answer"> 答え3 <!-- /div .answer --></div> <!-- /div#3 --></div> <div id="4" class="box"> 問題4<br /> <input type="button"value="答えの表示" class="kirikae"/> <div class="answer"> 答え4 <!-- /div .answer --></div> <!-- /div#4 --></div> <!-- /div#wrap --></div> </body>

  • Ajaxで外部サイトの取り込み

    Ajax非同期通信、例えばJQueryの以下の様にyour-web-siteをページ内に取り込んだ場合、cssやjavascriptのパスが相対パスで指定されているのが原因で正しく表示されない場合があります。通常のhtmlで静的に取り込む場合は<iframe>で取り込むか、<base href="...">などを用いて相対パスを絶対パスに変換するのですが、Ajaxで動的に取り込む場合のうまい方法がわかりません。 よいアイデアや方法があればご教示ください。 --- javascript---- $(function (){ $("#a").load("http://your-web-site/"); }); ---- html -------- <div id="a"></div> ------------------

  • jQuery・Ajaxについて教えて下さい。

    jQueryを使用した「Tipped」というツールチップ作成フレームワークを使用しています。 「ツールチップの上にさらにツールチップを表示する」ということが出来ず困っております。 ドキュメント http://projects.nickstakenburg.com/tipped/documentation 特定のクラス名の文字にカーソルを当てると、Ajaxにより外部HTML(PHP)の内容が小窓で表示されるというものです。 これを使って外部HTMLの表示をすることはできたのですが、 ツールチップ内に表示されるHTMLの中にさらに同名のクラス名を埋め込み、 そこにカーソルを当てたとき二重(入れ子)でツールチップを表示するということをしたいのですが、 最初の1つしか表示されません。 ■読み込む側(A.php) ~ 必要なファイルの読み込み ~ <span class='tipped' data-tipped='B.php'>カーソルを当てると「B.php」の内容を表示</span> <script type="text/javascript"> jQuery(document).ready(function() { Tipped.create(".tipped", { ajax: true }); }); </script> ~ ■読み込まれる側(B.php) <span class='tipped' data-tipped='C.php'>ここにカーソルを当てて「C.php」の内容を表示させたい</span> A.phpからB.phpのツールチップを表示することはできました。 B.phpからC.phpのツールチップを表示することもできますが、 A.phpに表示したB.phpからはC.phpのツールチップが表示できません。 Ajaxを使わず、B.phpに静的なツールチップを埋め込んだ場合も表示できませんでした。 wordpressの記事ページで動作させています。 必要なjsファイルは読み込んでおり、ファイルはそれぞれ同じ階層にあります。 何が問題で表示できないのでしょうか。どうかご教示をお願いします。

  • jqueryでajaxな読み込み+切り替え

    現在jqueryで任意のディレクトリ内のファイルを読み込んで表示、 さらに[NEXT]、[PREV]で読み込むファイルを切り替えるようにしたいと考えています。 ロード先のディレクトリのファイル名は年+月などの規則性を用いて(201103.html、201102.html...)付けていきます。 【html】 <body>    コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ    <div id="loadContents">       ここに「/hoge/foo.html」を読み込み&切り替え    </div>    <a href="#" id="btnPrev">PREV/a>    <a href="#" id="btnNext">NEXT</a>    コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ </body> ■欲しい機能 ・最初に読み込まれるのは現在の月のファイル ・端のファイル([NEXT]、[PREV]がそれ以上ない場合)には<a>タグを削除、 もしくは「display: none」を付けるなどして非表示に ■できれば欲しい機能 ・切替時にフェードイン&フェードアウト等のアニメーションの設定オプション 以上になります。 難しいようでしたら、[NEXT]、[PREV]のリンクは 前後のリンク先をぞれぞれのリンク先に設定して 読み込まれるコンテンツのなかに入れてしまってもありかなと思っています。 【例:201103.htmlの場合のリンク】 <a href="/hoge/201102.html" id="btnPrev">PREV/a> <a href="/hoge/201104.html" id="btnNext">NEXT</a> まだまだ未熟でどうしらた実装できるかの引っかかりさえ見えない状況です。 ご教授ください。 どうぞ宜しく御願い致します。

  • jQueryでloadしたphpをapendToしたいのですが。

    jQueryのload関数を使って、日付を元にランダムな10ケタの数字を生成するプログラム(rand.php)を読み込み、そのプログラムの結果をcontentsというIDのdiv内にappendToしたいのです。 そして、5秒ごとにrand.phpを読み込み、そのたびにcontentsというIDのdiv内に結果をappendToしたいのです。 イメージとしては下記のような感じになります。 $(function(){ function loadAndAppend(){ $("div#contents").apendTo(load("rand.php")); setTimeout(loadAndAppend, 5000); }; loadAndAppend(); }); しかし、これだとうまくいきません。apendTo(load("rand.php"))という部分がおかしいのでしょうが、これをどう直せばよいか分かりません。 ぜひとも解決法を教えていただけないでしょうか。

  • jQueryで表示と非表示の切り替えについて

    趣味の写真ギャラリーサイトの制作を行っており、トップページには以下のようにサムネイルを配置しております。 <nav> <div id="haru">春の画像の表示</div> <div id="natsu">夏の画像の表示</div> <div id="aki">秋の画像の表示</div> <div id="fuyu">冬の画像の表示</div> <div id="jitensya">自転車の画像の表示</div> <div id="umi">海の画像の表示</div> <div id="koibito">恋人の画像の表示</div> <div id="yuki">雪の画像の表示</div> </nav> <div id="content"> <div class="thumb haru"><a href="#"><img src="img/haru.png" alt="春の画像"></a></div> <div class="thumb natsu"><a href="#"><img src="img/natsu.png" alt="夏の画像"></a></div> <div class="thumb aki"><a href="#"><img src="img/aki.png" alt="秋の画像"></a></div> <div class="thumb fuyu"><a href="#"><img src="img/fuyu.png" alt="冬の画像"></a></div> <div class="thumb haru jitensya"><a href="#"><img src="img/haru.png" alt="春と自転車の画像"></a></div> <div class="thumb natsu umi"><a href="#"><img src="img/natsu.png" alt="夏と海の画像"></a></div> <div class="thumb aki koibito"><a href="#"><img src="img/aki.png" alt="秋と恋人の画像"></a></div> <div class="thumb fuyu yuki"><a href="#"><img src="img/fuyu.png" alt="冬と雪の画像"></a></div> </div> とりあえずid="content"内に全画像(サムネイル)を配置(表示)しておき、以下のようなことを行いたいのですが… id="haru" クリック時、class="haru"以外の要素に"display:none;"を追加… id="natsu" クリック時、class"natsu"以外の要素に"display:none;"を追加… id="aki" クリック時、class="aki"以外の要素に"display:none;"を追加… id="fuyu" クリック時、class="fuyu"以外の要素に"display:none;"を追加… id="jitensya"… id="umi"… id="koibito"… id="yuki"… classをタグのように使い、画像の表示と非表示を切り替える上手い手を探しております。jQueryでdisplay:noneを追加したり、toggleを使って元の状態に戻したりすることは可能でしたが、haruクリック後にnatsuをクリックすると期待通りに動きが得られなかったりと、60のおじいちゃんにはお手上げです。 解決法をjQueryの達人にご教授頂ければ幸いです。if文と呼ばれる、showの時にhide、hideの時はshowなど、そういったことが必要な気がしております。どうぞ宜しくお願いいたします。

  • Ajaxで書き換えた要素内でLightbox

    Ajaxの勉強がてらいろいろ試しています。 そこで、質問なのですが、 例えば、<div id="xxx"></div>の中をAjax.Updaterで <a href="image_l.jpg" rel="lightbox[roadtrip]" title="image"> <img src="image_s.jpg" alt="image"> </a> と書き換えた場合、lightboxの機能が使えません。 とりあえず、Lightboxはinitializeでいろいろやってるために、Ajaxで後から追加した要素には適用されない、ということは判りました。 Ajaxで後から追加した要素内で行いたい場合、IFRAMEを使うしか方法はないのでしょうか? よろしくお願いします。

専門家に質問してみよう