重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

うまく動作しないJavascriptなのですが、こういった方法は可能なのでしょうか?
お分かりになりましたらご教授お願いします。
--------------------
■html

<div class="orenge1"></div>
オレンジ1です<br>
<div class="orenge2"></div>
オレンジ2です<br>
<div class="orenge3"></div>
オレンジ3です<br>

--------------------

■Javascript 記述は最下部の</body>直前です。
<script type="text/javascript">
window.onload = function() {
document.getElementsByClassName("orange1").innerHTML = ('<a href="./item/?item=orange1">商品はコチラ</a>');
document.getElementsByClassName("orange2").innerHTML = ('<a href="./item/?item=orange2">商品はコチラ</a>');
document.getElementsByClassName("orange3").innerHTML = ('<a href="./item/?item=orange3">商品はコチラ</a>');
}
</script>

--------------------

■やりたい事
<div class="orenge1"></div>
の部分に
<a href="./item/?item=orange1">商品はコチラ</a>
を表示したいと思っています。

同一ページに複数回表れる場合もあります。


よろしくお願い致します。

A 回答 (3件)

0個以上の複数対象に同一の操作を行う簡単な記述


var a = Array.prototype.slice.apply(document.getElementsByClassName(クラス名));
a.forEach(function(e){e.innerHTML = 中身});

もっと簡単な記述
Array.prototype.forEach.call(document.getElementsByClassName(クラス名), function(e){e.innerHTML = 中身});

さらに簡単な記述
[].forEach.call(document.getElementsByClassName(クラス名), function(e){e.innerHTML = 中身});
    • good
    • 0
この回答へのお礼

簡潔でわかりやすいご説明ありがとうございます!

お礼日時:2013/11/29 12:28

まず、<script>を</body>直前に入れる理由は何でしょうか?


<script>は「本文」ではないのですから、よほどのことがない限り<head>に入れましょう。
読み込み順を気にしているのかもしれませんが、window.onloadに処理を設定するコードになっているのですからそこは関係ありません。それともwindow.onloadの意味を知らずなんとなくコピペしたんでしょうか?
次に、本文に示したHTML部分は何かのブロックに入っていますか?<body>直下に<div>以外に囲まれていないインライン要素を置くのは文法違反です(HTML5ではOKですがたぶん違いますよね)。
最後に、classがJSでは「orange」ですがHTMLでは「orenge」です。これは元ソースからのミスですか?もし手打ちで間違えている場合、回答者が困りますので、今度からは必ずコピペしてください。


さて本題です。
丸括弧を使うのは「関数に引数を渡すとき」だけだと覚えてください。
innerHTMLは「プロパティ」であり、それに値を設定するのですから、丸括弧は不要です。
また、classは同じものが複数存在しうるので、getElementByClassNameは単一の要素ではなくノードリストを返します。
ということで、HTMLのほうのclassを「orange」に直したとして、こうです。

document.getElementsByClassName("orange1")[0].innerHTML = '<a href="./item/?item=orange1">商品はコチラ</a>';
document.getElementsByClassName("orange2")[0].innerHTML = '<a href="./item/?item=orange2">商品はコチラ</a>';
document.getElementsByClassName("orange3")[0].innerHTML = '<a href="./item/?item=orange3">商品はコチラ</a>';

なお、本文のソースでは判断できませんが、もし「orange1」などがHTML内に複数存在することがない場合、それはclassの使用には適していません。idを使うか、もしくはidもクラスも付けないかにしましょう。
何も付けなくても取得方法はいくつもありますので。
    • good
    • 0

まずgetElementsByClassName()は戻り値が配列形式になります


getElementsByClassName("orange1")[0]、などのようなアクセスの仕方をしてください
ただしブラウザによってぶれもあるためあまりお勧めしません。
そもそもクラス名でアクセスする場合、同じクラス名を複数のタグが共有していたり
ひとつのタグで複数のクラス名を持っていたりするため処理は煩雑になります

可能であればidで指定してやることをお勧めします
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!