• ベストアンサー

個別IDの割付

PHPスクリプトのブログなどで、 投稿される”記事”に<div id=***>と言うような各記事の個別のIDを割り振りたいのです。 ご教授お願い申し上げます。 内容としては・・ テンプレートに記事を埋め込む形なので、 <div id=hoge>記事1</div> <div id=hoge>記事2</div> <div id=hoge>記事3</div> ・・・ と言うのは簡単です。 ですが。。 <div id=hoge1>記事1</div> <div id=hoge2>記事2</div> <div id=hoge3>記事3</div> ・・・ 記事に応じて順次1,2,3・・と言うように、 番号を振るものをイメージしております。 これが可能になると、各記事に個別のCSSを定義できるなど、 利便性が格段に増えるんじゃないか?と思っています。 よろしくお願い申し上げます。

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

  • ベストアンサー
noname#199778
noname#199778
回答No.3

PHPスクリプトで吐き出されるHTMLソース自体を書き換えたいと言う場合でしたら、PHPスクリプト自体に手を加えて、idを連番をつけて吐き出させるような格好に整える方が、スマートなやり方になると思います。 ただ、JavaScriptでどうにかしたいと言う場合であれば、JavaScriptから書き出されている要素に対して一時的な変更を加え、連番を振り直してやることも可能です。 以下に、実際のJavaScriptを書きます。 <script type="text/javascript"><!-- function init(){ if (document.getElementsByTagName){ len=document.getElementsByTagName("div").length; n=1; //←id名に追加する連番の初期値 for (i=0; i<len; i++){ if (document.getElementsByTagName("div")[i].getAttribute("id")=="hoge"){ document.getElementsByTagName("div")[i].setAttribute("id","hoge"+n); n++; } } } } window.onload=init; //--></script> 上のソースをページ内に入れておくと、ページロードが終った時点でページ内の総てのdiv要素を取得し、各div要素がid=hogeというid属性を持っているかどうかをチェックして、hogeと言うid名が与えられているdiv要素だった場合には、そのdiv要素のid名をhoge1、hoge2、hoge3と、1から始まる連番を追加した名前に一時的に置き換えます。 DOMを利用しているので、DOMに対応していないブラウザでは動作しません。 上のソースは、windowsのIE6、Netscape7.1、Opera7.11で、動作を確認しています。 とりあえず、idの割り付けについてだけ、JavaScriptで対処する方法を想定してみました。 参考になれば。

charara
質問者

お礼

すばらしい! ありがとうございます! 思ったとおりの結果が得られました。 本当にありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • ryou0607
  • ベストアンサー率27% (71/261)
回答No.2

同一IDを持ったオブジェクトがある場合、 hoge[0] hoge[1] hoge[2] といったように取得することが可能です。 i=0; while(document.getElementById("hoge["+i+"]")){ document.getElementById("hoge["+i+"]").class="hogehoge"; i++; } 書き方(indexの指定の仕方)はちょっと違うかも知れないですが、色々試してみてください。document.forms[0].hoge[0]とか。

charara
質問者

お礼

ご返答ありがとうございます! 完全に理解は出来ていませんが、雰囲気が分かってきました・・^^; 実は、分かったようなこと言ってますが、 私には、「取得」した後、「どぉやって吐き出す?」の最大の難関が残ってしまいます。(笑 hoge[0] hoge[1] hoge[2] ・・を何らかの形で反映させて、 ←ココが知りたい。 最終的には_ var hoge = document.getElementById("hoge[1]"); hoge .innerHTML = "ほげ1"; var hoge = document.getElementById("hoge[2]"); hoge .innerHTML = "ほげ2"; 。。と言うような形にしたいのです。 引き続きご教授お願い申し上げます。

全文を見る
すると、全ての回答が全文表示されます。
  • ryou0607
  • ベストアンサー率27% (71/261)
回答No.1

質問の焦点が不明瞭ですが、idを順番に振りながらオブジェクトを作成したいっていうことでしょうか。 それでしたら、 for(i=0;i<hogeSize;i++){ document.write("<div id=hoge"+i+">"); document.write(記事[i]); document.write("</div>"); } こんな感じでできます。 hogeSizeは、記事の数で良いと思います。

charara
質問者

お礼

ご返事首を長くしてお待ち申し上げておりました。(笑) ありがとうございます。 >質問の焦点が不明瞭・・ ごもっともな気がします。^^; 要らない言葉並べるより単刀直入に申し上げますと・・。 元々生成される <div id=hoge>記事1</div> <div id=hoge>記事2</div> <div id=hoge>記事3</div> ・・・ を、    ↓ <div id=hoge1>記事1</div> <div id=hoge2>記事2</div> <div id=hoge3>記事3</div> ・・・ と言うように置換(になるのでしょうか)出来ないでしょうか? と言うことなんです。 document.getElementById("hoge"); にしても最初の"hoge"だけみたいだし・・ 「同一IDを捕らえておいて、順に"+i+"を付け加える」 と言った感じでしょうか。

charara
質問者

補足

>document.getElementById("hoge"); >にしても最初の"hoge"だけみたいだし・・ >「同一IDを捕らえておいて、順に"+i+"を付け加える」 >と言った感じでしょうか。 ・・の補足です。。 一つ目の"hoge"が掴めても、次の"hoge"に移るのは可能なのでしょうか..。 どぉすればいいのか皆目検討がつきません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Movable Typeの個別エントリーアーカイブ・テンプレートの作成について

    大変、恐縮ですが・・・現在、Movable Typeをダウンロードしてブログをカスタマイズして作成しているのですが、 個別エントリーアーカイブ・テンプレートのテンプレート内にて 個別の記事を表示させたいのですが、タグを打ち込んで再構築してみると、個別エントリーページなので、トップページの様に、今まで投稿した全ての記事がアップされてしまっています。 私が打ち込んだ個別ページのテンプレート内の個別記事を表示させる為のコードは <MTEntries> <div class="entry" id="<$MTEntryID$>"> <h2><$MTEntryTitle$><br /> <span class="subtitle"> <$MTEntryDate$> </span></h2> <$MTEntryBody$> </div><!-- /entry --> ・投稿者の設定(コードは省略) ・コメントの設定(コードは省略) ・トラックバックの設定(コードは省略) </MTEntries> (内容は、タイトルがあり、その下に投稿日付が表示され、個別の本文がひとつ表示される、という形です。) と記入していますが、これだとトップページの様に全ての投稿が表示されてしまいます。 個別記事だけを表示させるには、違うムーバブルタイプのタグがあるのでしょうか? 初歩的な質問で大変申し訳ございませんが、どなた様か宜しくお願い致します。

  • 個別記事タイトルをリンク

    FC2ブログのLegend_v110というテンプレートを使用しております。 仮に、一つのカテゴリに5つの記事があったとします。 カテゴリをクリックすると、5つの記事が出てくるのですが、 それぞれの個別記事タイトルから一つの記事にリンクが出来ません。 このように、個別記事タイトルにリンクをつけ、その記事だけを表示するHTML、CSSの変更方法がわかりません。 (続きを読むからでしたら個別に飛べるのですが・・・) テンプレ作者様に問い合わせをしても、ナシのつぶてです。 どなたか教えて頂けると幸いです。 宜しくお願い致します。

  • CSS。特定ID内の特定IDにだけ適応できますか?

    宜しくお願いします。 CSSで定義した #A というIDがあると仮定します。 その中に、#B があるとします。 <div id="A"> <div id="B"></div> </div> このBだけに効かせるCSSの書き方はどのようにしたら良いでしょうか? #A #B { } と言うことではないと思うのですが・・・。 宜しくお願いいたします。

    • ベストアンサー
    • HTML
  • innerHTMLを使ってID要素の内容を変えたい

    innerHTMLを使ってID要素の内容を変えたいのですが、 下記のような使い方はできないのでしょうか? var changeTEXT = document.all("hoge2").innerHTML; できない場合、これに変わるようなものがありましたら教えていただけたら、うれしいです。 よろしくお願いします。 <html> <head> <script language="JavaScript" type="text/javascript"> <!-- var changeTEXT = document.all("hoge2").innerHTML;         function change1_ID(){ if(document.all){ document.all("hoge1").innerHTML = changeTEXT } if(document.getElementById){ document.getElemntById("hoge1").innerHTML = text1 } } //--> </script> <style type="text/css"> <!-- #hoge1 { margin: 0px; padding: 0px; height: 600px; width: 600px; } #hoge2 { margin: 0px; padding: 0px; height: 600px; width: 600px; } --> </style> </head> <body> <div id="hoge1" onclick="change_ID()"> ここの内容を変えたい</div> <div id="hoge2"> ここに入力されたHTMLの内容をhoge1の内容にしたい</div> </body> </html>

  • CSSでDIV IDをつかった行間設定

    css div#hoge { line-height: 200%; } hoge.html <body> <div id="hoge"> あいうえお<BR> かきくけこ<BR> </div> </body> 上記にてやってみると行間が200%になってくれません。行間を200%にするにはどうすればいいですか。 おしえてください ぐー!

    • ベストアンサー
    • HTML
  • livedoorblogの最新記事に連番でID

    <IndexArticlesLoop>内のものが繰り返し表示されますが、 その中の<div class="article-header">に対して 以下のように自動でIDが割り振られるようにしたいのですが、 そのような動作を実行できるjavascriptなどはないでしょうか。 よろしくお願いします ※livedoor blog proを利用しておりますのでFTP機能も利用できます。 1つ目の記事 … <div class="article-header" id="hoge1"> 2つ目の記事 … <div class="article-header" id="hoge2"> 3つ目の記事 … <div class="article-header" id="hoge3">

  • スタイルシートで特定IDかつ特定クラスの要素のスタイルを設定するには?

    <div id="hoge" class="piyo">~</div> 上記のように特定IDかつ特定クラスの要素にのみスタイルを適用させるには CSSにどのように記述すればよいでしょうか? div#hoge.piyo、div.piyo#hogeいずれも試してみましたがうまく動きませんでした。

  • wordpressの個別ページに外部ファイルを‥

    wordpressの個別ページに外部javascriptファイルを使用して動画を貼り付けたいのですが、いまいち方法がわかりません。Custom CSS and JavaScriptプラグインを有効化して、カスタムフィールドに名前と値(http://~)をいれたのですがブログ記事に動画がつきません。何か別にphpファイルを用意してスクリプトを記述しないといけないのでしょうか? ちなみに貼り付けたいスクリプトはhttp://www.schick-jp.com/tvcmのサイトにあるものです。

    • ベストアンサー
    • PHP
  • jQueryでスマホ向けページのロールオーバー

    スマートフォン向けページで、記事をタップすると その記事にグレーのオーバーレイがかかり、 指が外れるとオーバーレイが消える効果をつけたいと思います。 CSSだけでは難しそうでしたので、jQueryで空のdivを作成する 方法を考えました。 背景を透過した空のdivを生成するところまではできたのですが、 それを外すことがどうしてもできません。 Javascriptの基本的な文法がわかっていないせいだと思います…。 下記がうまく行かなかったソースです。 removeの記述に問題があるのだと思いますが ご教授の程よろしくお願い致します。 また、この程度JSを使わなくてもCSSだけでできるようでしたら その方法でもかまいませんので教えていただければと思います。 ■JS <script> $(function($){ $( "#hoge a" ) .bind( 'touchstart', function(){ $( this ).prepend( "<div></div>" ); }).bind( 'touchend', function(){ $( this ).unbind(); }).bind( 'touchend', function(){ $( "<div></div>" ).remove( ); }) }); </script> ■HTML <section id="hoge"> <a href="#"> <article> <figure><img src="image.png" width="100" height="120"></figure> <p>テキストテキスト</p> </article> </a> </section> ■CSS #hoge article { position: relative; } #hoge article figure { z-index: 1; } #hoge a div { background-color: #000; opacity: 0.3; width: 100px; height: 150px; position: absolute; top: 0; left: 0; z-index: 2; }

  • FC2ブログで個別記事下に

    Httpとかそういう知識がほとんど無く画像系のブログを始めたのですが 個別記事の下に、トップページと同じ(月、カテゴリの記事リストでもいいのですが)記事リストを表示したいのですが <!--topentry--> ~ <!--/topentry-->だとその個別ページと同じ記事が一つ表示されるだけで <!--titlelist_area-->~ <!--/titlelist_area-->だと表示したい項目の対象タグに変えても表示されませんでした(これは多分私が根本的に何かを間違ってると思われます;;) 使ってるテンプレートはFC2ブログのテンプレート工房さんのstandard_pinkです 環境設定で出来る文字だけの関連記事リストではなく、トップページ等と同じ様なタイトルやサムネ(記事冒頭部分?)等も表示したリストを差し込みたいのですが・・・ サムネ付きRSS配信のブログパーツ等でCSSをいじるとかではなく理想はそのまま持ってくる感じがいいのですが、アドバイスお願いします