• 締切済み

HTML内で表示しないデータを持ちたい

jqueryなどで操作するデータをHTML内に非表示で埋め込みたいのですが、 どうやるのが一般的かわからず、質問させていただきました。 たとえば、テストの点数をデータとして持ちたい場合、XMLチックに <result date="20111120">  <record class="国語" point="80" />  <record class="数学" point="60" />  <record class="英語" point="90" /> </result> といった持たせ方を考えたのですが、これが良いのかわからず、かといって、<div>タグで <div id="testResult" date="20111120" style="display:none">  <div tagId="record" class="国語" point="80" />  <div tagId="record" class="国語" point="80" />  <div tagId="record" class="国語" point="80" /> </div> などとやるのが良いのかも良くわかりません。 どのようにやるのがスマートな方法なのでしょうか? よろしくお願いします。

  • HTML
  • 回答数5
  • ありがとう数1

みんなの回答

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.5

HTML内に非表示でということは、ソース表示あるいはjavascript,CSSのいずれかが使えないと見られると言うことでよいのですか? 通常はご自身が書かれているようにXMLでデータを持ち、XSLTでHTML(XHTML)に変換し、そのプレゼンテーションをJQuery,CSSでコントロールする形だと思いますが・・・

回答No.4

すみません、補足追加です。 No.3の(jQueryはよくわかりませんので、、、)の下に挿入して考えてください。 -------------- >jqueryなどで操作するデータをHTML内に非表示で埋め込みたいのですが、 >どうやるのが一般的かわからず、 『一般的』にはXMLDocumentを生成する方法ではなく、JSONで作っておいた物をそのまま使用する、2番目の例のような方法だと思います。 ですが最近では、Ajaxも『一般的』に使用されています。 つまり、HTML内にデータを保持するのではなく、 XMLデータはサーバーで生成(当然、CGI(Perl、PHPなど)が絡む)するのも『一般的』です。 $('#output').load({url: 'http://・・・', some:some, any: any}); jQuery.load()は、JavaScriptでXMLをHTMLに変換する物ではなく、サーバーでHTMLを生成しておいた物を挿入するだけだったと思うので、質問の目的とは若干、意味は違いますが、、、 データのすべてがサーバーに保存されていれば、簡単に生のデータを見る事はできませんから、 データを隠蔽できる=スマート、という言い方はできるかもしれません。 データを直接扱うCGIスクリプトがどんなにめちゃくちゃでも、他人にはわかりませんしね。(笑)

pokapoka1980
質問者

補足

丁寧にありがとうございます。 ただ、やはりJSONでデータを持つ形式はやりたくないのです。 CSSを差し替えれば、表示が変わり javascriptを差し替えれば、動作が変わり、 HTML部分の値を差し替えれば、データが変わる。 といった形がやはりスマートだと思います。 いろいろ考えましたが、 tableタグなどでデータを持ち非表示にすることで対応したいと思います。

回答No.3

「スマートの定義」は何ですか? <script> var data='<result date="20111120">'+  '<record class="国語" point="80" />'+  '<record class="数学" point="60" />'+  '<record class="英語" point="90" />'+ '</result>'; </script> としておけば、 $('document').ready(function(){ var doc=new XMLDocument(data); var date=docs.getElementsByTagName('result')[0].getAttribute('date'); var html='<p>'+date + '</p>'; html+='<dl>'; var recs=doc.getElementsByTagName('record'); for(var i=0,rec;rec=recs[i];i++){  var cls = rec.getAttribute('class');  var pts = rec.getAttribute('point');  html += '<dt>' + cls + '</dt><dd>'+ pts + '</dd>'); } html+='</dl>'; $('#output').html(html); }); などという書き方もできると思います。 JSONなら以下のようになると思います。 <script> var data={date : "20111120",  record : [   {'class': '国語' : point : 80},   {'class': '数学' : point : 60},   {'class': '英語' : point : 90}  } } $('document').ready(function(){ var html='<p>'+data.date + '</p>'; html+='<dl>'; var recs=data.record; for(var i=0,rec;rec=recs[i];i++){  var cls = rec.class;  var pts = rec.point;  html += '<dt>' + cls + '</dt><dd>'+ pts + '</dd>'); } html+='</dl>'; $('#output').html(html); }); (jQueryはよくわかりませんので、適宜最適化してください。) XMLデータやJSONデータを別ファイルとして保存しておいたり、CGIで動的に生成した物をAjaxで取得するなら、data変数やrec変数の初期化の仕方がまた違ってきますが、 データの保存場所として、 ・<script>タグで記述した部分にするか、 ・別ファイルとして保存しておいて、XHR(XMLHttpRequest、いわゆるAjax)で取得するか その違いだけだと思います。 ですが、<div>タグで持たせる方法はお勧めしません。 var docs=document.getElementById('testResult'); とやれば、XMLの例と全く同じ方法で作る事はできます。 ですが、スクリプトとCSSを停止したブラウザで、そのデータが丸々表示されます。 これは、利用者に「何が書かれているのか」と混乱させる原因となります。 もちろん、スクリプト、CSS必須が閲覧条件のサイト(ページ)にするなら、この限りではありません。 データの保存方法について、以下のページも参考になると思います。 http://okwave.jp/qa/q7122714.html

回答No.2

>この分離の原則が崩れてしまうため、避けたいのです。 その意味合い、少し誤解しているかも。単にカプセル化の話をしていると思いますよ。例えばプラグインの開発とか、フレームワークなど原則論がないと、まとまりがつかないですからね。自己仕様なら、どうでもかまわないと思いますが・・・。 第3三者に公開する場合の、こころえと思えばいいのではないでしょうか。 いずれにせよ、HTMLソースに含めるなら、XML対応ブラウザ、非対応ブラウザに対する動作の違いを考量してください。非対応なら、そのまま文字列として表示してしまいますね。 それとDOMとして取得するに当たって、どう動くかも違ってきます。ためせば分かります。

回答No.1

普通そういうことをしたい場合はJSON形式でデータを与えそうな気がしますが。 データの置き場所としては別ファイルのデータをscriptタグで参照することで読んできてもいいですし、同じJavaScriptのプログラム中に書いても良いと思いますが。

pokapoka1980
質問者

補足

jqueryの書籍を買ったのですが、そこに手続き(jquery)とデータ(HTML)と表示(CSS)の分離がjqueryの最大の目的と書かれていました。 このjqueryをフルに使用したサイトを作成したいと思っており、 JSONでデータを持ってしまうと、この分離の原則が崩れてしまうため、避けたいのです。 よろしくお願いします。

関連するQ&A

  • HTMLからHTMLへ「データを送りつけ表示させる」といったことは可能

    HTMLからHTMLへ「データを送りつけ表示させる」といったことは可能でしょうか? うまく表現が出来ないのですが・・・ご理解いただけるとうれしいです。 私がWEBサーバ2台を管理しています。 A:http://hogehogehoge.net/AAA.html B:http://pogepogepoge.net/BBB.html Aのページは動的にjQueryなどを使ったページです。 Bは生粋のHTMLです。このサーバには出来ればライブラリなどは入れたくありません。 変更するとしたらHTMLページのソースだけという条件にさせてください。 AAA.htmlのタグ内のデータが変わったらBBB.htmlの<div>タグ内にデータを送りつけて表示させるなんて方法は出来ないものでしょうか?

    • ベストアンサー
    • AJAX
  • jQueryでHTML表示の部分

    jQueryで表示されるデータをHTMLで表示するのですが、 色々いじっていたのですが、表示されなかったり<li>タグだけしかひょうじされなかったりして、 いまいちわからなくて、質問を致しました。 -現在の表示------------ <li>No:1 Title:タイトル</li> ----------------------- <li>タグの中にclassを追加したいのですが、 どうすれば、<li>タグにclassが追加されるのでしょうか。 ----------------------------------- <li class="test">No:1 Title:タイトル</li> ----------------------------------- こんな感じに表示させたいのです。 大変申し訳ございませんが、よろしくお願い致します。 <script type="text/javascript"> jQuery(function(){ $.getJSON("./json_sql.php",function(data){ $('p','#demo').remove(); $('#demo').append('<ul/>'); $.each(data,function(i,items){ $("<li/>",{ text:'No:'+items.no+' Title:'+items.title }).appendTo('ul','#demo'); }); }); }); </script> <div id="demo"> <h4>リスト</h4> </div>

  • ボタンを押すとデータ表示、再度押すと非表示

    ボタンを押すとデータが表示されるjqueryを利用したjavascriptがあります。 このボタンを再度クリックすると非表示にしたいと考えています。 奇数回クリック=表示 偶数回クリック=非表示 という形です。 ご教授いただきたくお願いいたします。 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> <script type="text/javascript"> jQuery(function($){ $("#btn0").click(function (e) { e.preventDefault(); $("#data").show(); }); </script> <button class="button18" id="btn0">ボタン</button> <div id="data" style="display:none"> データ </div>

  • HTMLページにPHPで処理した結果を表示したい

    以下の【HTML】内にPHPの結果を表示したいと思い、試行錯誤していますが、うまくできません。 ※http://xxx.com/ISL/ISLPage.php?query1=apple をブラウザで実行すると正常に表示されます。 たぶん、header("Content-type: application/x-javascript"); を 【ISLPage.php】か【ISLModule.php】のどこかに書きこんで 【ISLModule.php】の$html []= あたりに、echo "document.write・・・ に直せば できそうな気がするのですが、具体的にどうすれば、表示されるかが分かりません。(>_<;) 既に数十回トライしましたが、どうしてもダメでしたので、どうかご教示いただければと思います。 申し訳ございませんが、どうかよろしくお願い致します。 【HTML】 <html> <body> </body> <script type="http://xxx.com/ISL/ISLPage.php?query1=apple"></script> </html> 【ISLPage.php】 <html> <body> <?php include_once("./ISLModule.php"); echo $_GET['query1']; new ISLModule(array( "query" => $_GET['query1'], "hits" => 3 )); ?> </body> </html> 【ISLModule.php】 <?php class ISLModule { function __construct($param = array()) { $results = array(); if ($param['query'] != "") { $query4url = rawurlencode($param['query']); try { $url = "http://xxxxx/ … buildQuery($param); $xml = simplexml_load_file($url); if ($xml["totalResultsReturned"] != 0) { $results = $xml->Result->Hit; } } catch(Exception $e) { } } $result['query'] = $param['query']; $result["results"] = $results; ISLModule::display($result); } function display($param = array()) { $html = array(); $html []= "<div class=\"YSAPISDK\">"; $html []= "<div class=\"ISLModule\">"; $html []= "<h1>「" . h($param['query']) . "」の検索結果</h1>"; foreach ($param["results"] as $result) { $html []= "<div class=\"Item\">"; $html []= "<p><a href=\"" . h($result->Url) . "\"><img src=\"" . h($result->Image->Small) . "\" /></a></p>"; $html []= "<h2><a href=\"". h($result->Url) . "\">" . h($result->Name) . "</a></h2>"; if (!is_null($result->PriceLabel->SalePrice)) { $html []= "<p class=\"Price\">". h($result->Price). "円</p>"; } $html []= "</div>"; } $html []= "</div>"; $html []= "</div>"; echo join("\n", $html); } } ?>

    • 締切済み
    • PHP
  • menuのHTMLタグとCSSが上手くいかない

    画像(1)が現状です。イメージは(2)です。何故HTMLタグを別々にするかというとスマホにしたらsubメニューをボトムに配置したいのです。 メニューとsubメニューの背景がくっつかないのです。 (1)を(2)にするにはどうすれば良いでしょうか? 以下がHTMLタグとCSSになります。 アドバイスをお願いします。 HTMLタグ <div class="div1"><ul><li>メニュー1</li><li>メニュー2</li><li>メニュー3</li><li>メニュー4</li></ul></div> <div class="div2"><ul><li>sab1</li><li>sub2</li></ul></div> CSSスタイル ul li { list-style: none; } .div1 { background: #ccc; float: left; } .div2 { width: 240px; background: #999; float: right; } li { float: left; padding: 5px 15px; }

  • 変数内でHTMLを使用したいです

    自分なりにいろいろ試してみたのですが出来なかったので、お教えいただきたいと思い、質問させていただきます。 現在、perlを使ってCGIを組んでいます。 (というよりは組まれていたCGIを編集しています) その中で、外部から入力された文字列データを変数に格納し それをprintで書き出しています。 以下のような形です。 -------------------------------------------------- open(IN,"$datfile"); while (<IN>) { my ($no,$date,$name,$comment,$ip) = split(/<>/); print "<div class=\"line_wrap\">"; print "<div class=\"line_left\">$date</div>"; print "<div class=\"line_right\">$comment</div>"; print "</div>"; } close(IN); -------------------------------------------------- なんとなくでしか理解できてないのに編集したのでおかしい部分もあるとは思いますが・・・。 今回お伺いしたいのは $comment という変数内に、HTMLタグが入っていた場合、そのままの状態で吐き出されてしまうことになり困っています。 変数内の文字列に記載されているHTMLを、HTMLとして認識して実行したいのですが(要はリンクを貼りたい)可能でしょうか? 外部から入力されているものですので、HTMLがあったりなかったりします。 何か方法があれば、教えていただきたいです。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 特定の条件のHTML要素を一括で表示・非表示

    お世話になっております。 javascript、または何らかの方法で、特定の条件にあうHTML要素のCSSプロパティを一括で書き換える方法を探しております。 Dreamweaverを使っているのでビヘイビアでできないか試してみましたが、ID単位で要素を扱うので複数のレイヤーを同時に表示・非表示することはできないようでした。 以下、やりたいことの一例です。下記のように、ボタンを押すとその条件に合わないclassの要素を「display:none」状態したいと考えています。 ------------------------------------------------------------------ [イヌ表示ボタン]  [ネコ表示ボタン] [両方表示ボタン] <div class="dog">ダルメシアン</div> <div class="cat">ロシアンブルー</div> <div class="dog">柴犬</div> <div class="dog">チワワ</div> <div class="cat">シャム</div> <div class="cat">ヒマラヤン</div> <div class="cat"アビシニアン</div> <div class="dog">ゴールデンレトリーバー</dog> イヌ表示ボタンを押したときは、class="cat"がdisplay:noneになり、 のブラウザ上では犬だけがピックアップ表示される。 ↓ <div class="dog">ダルメシアン</div> <div class="dog">柴犬</div> <div class="dog">チワワ</div> <div class="dog">ゴールデンレトリーバー</dog> ------------------------------------------------------------------ 実際にはボタンで操作するだけではなく、たとえば犬ページ、ネコページを同じコンテンツに更新し、ロードイベントだけ異なった記述をするだけで、それぞれのページに適切なコンテンツのみ表示をさせたりしたいと考えております。 恐れ入りますが、何卒、よろしくお願い致します。

  • PHP ”XML_unserialize”でXMLを配列に変換したのですが・・・

    XMLファイルを配列としてとってこれる XML_unserializeというライブラリを使用して XMLファイルに含まれるデータをとってPHPで利用することが できたのですが、ここで一つ大きな問題が発生しました。 XML_unserializeをつかうと <XMLTAG>  取り出したいデータ </XMLTAG>      ↓ array(  [XMLTAG] = 取り出したいデータ ) と、たしかに取り出したいデータを配列に変換することができます。 しかし、取り出したいデータの中にタグが含まれていた場合 例えば <XMLTAG>  <div>取り出したいデータ</div> </XMLTAG> とかになっていると <div>もXMLと判断されてしまって 必要なデータがうまくとってこれないのです。 正規表現でエスケープさせるにしても数が膨大ですし、 XMLタグ名に実際にHTMLで使われている タグ名が使われているとも限りません。 どうすれば、 ”XMLの中に入っているHTML等のタグを含むデータ”をうまくとってくることが できるのでしょうか?

    • ベストアンサー
    • PHP
  • jQuery 要素を移動する方法

    以下のHTMLで<div class="target">ホゲ</div>を 自身の親要素の兄弟である <div class="header">内の一番後ろに移動する方法を知りたいです。(★の部分です) ちなみにこの型は2つだけでなく、10個とかあります。 jQuery(".target").each(function(){ jQuery(this)~ }); みたいな感じで簡単にいけるかなと思って甘くみていたら、うまくいかず、 この方法だとできない気がしてきてお尋ねしている次第です。 <div class="header">新規 Div タグの内容がここに入ります★</div> <div class="aaaa"> <div class="bbbbb"> <div class="contents"> <div class="target">ホゲ</div> </div> </div> </div> <div class="header">新規 Div タグの内容がここに入ります★</div> <div class="cccc"> <div class="dddd"> <div class="contents"> <div class="target">ホゲ</div> </div> </div> </div> よろしくお願いいたします。

  • jQueryでの画像のフェードインのループ

    jQuery初心者です。 jQueryで3枚の背景画像がフェードインで切り替わり、ループするようにしたいのですが、 下記のように書いてみたのですが、1週ループまでは上手くいくのですが、2週目に2枚目の画像で止まってしまいます。 下記だと何故2週目の2枚目で止まるのか?の原因と、スマートな書き方をご教授頂けませんか? <head> <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script> </head> <script> $(function() { $("div.fadein_1").fadeIn(1000); setInterval(function(){ $("div.fadein_2").delay(4000).fadeIn(1000, function(){ $("div.fadein_3").delay(4000).fadeIn(1000, function(){ $("div.fadein_2").attr('style', 'display:none;'); $("div.fadein_3").fadeOut(1000, function(){ clearQueue(); }); }); }); }, 0); }); </script> <div class="fade"> <div class="fadein_1" style="display:none;"></div> </div> <div class="fade"> <div class="fadein_2" style="display:none;"></div> </div> <div class="fade"> <div class="fadein_3" style="display:none;"></div> </div>

専門家に質問してみよう