現在、パソコンスクールでJavaScriptの勉強しています。
授業でtableタグを利用して表の中で商品の名前や在庫を表示するコードを作成しました。
元のコードはidを使っているため、項目を1回しか表示することができませんでした。
なのでカテゴリーだけクラスで名前を付けて2回目以降も同じクラス名で利用出来るように、
自分でカスタマイズしてみました。
ところが、クラス名を利用すると1回目から表示できません。
以下のサイトを参考にし、自分ではこのコードで動作すると思っていました。
ですが何か根本的に間違っているようです。
※タイプミスは確認しました。
https://bit.ly/2UOCebX
要するにtableタグを利用して表を作成する時に同じ項目を2行目以降も表示したいのですが、
こういう時にはクラス名を利用し、getElementsByClassNameで値を取得したり代入することはできないのでしょうか?
お手数ですが詳しい方、説明の上手な方、教えて下さい。よろしくお願いします。
コードは以下の通りです。
ブラウザーでの表示は画像のようになります。
<html>
<body>
<h5>idなので同じidをhtmlページで2回表示することは出来ない</h5>
<h5>getElementsByClassNameを使ったけど表示できない</h5>
<section>
<table>
<tr>
<td>title</td>
<td>categoly</td>
<td>price</td>
<td>stock</td>
<td>cat:ここだけClassName</td>
</tr>
<tr>
<td id="title"></td>
<td id="categoly"></td>
<td id="price"></td>
<td id="stock"></td>
<td class="cat"></td>
</tr>
<!--3段目は表示されない-->
<tr>
<td id="title"></td>
<td id="categoly"></td>
<td id="price"></td>
<td id="stock"></td>
<td class="cat">「あり」「なし」</td>
</tr>
</table>
</section>
<script>
var jsbook = {title:'JavaScript入門', price:2500, stock:3, categoly:'書籍', cat:'付属品',};
document.getElementById('title').textContent = jsbook.title;
document.getElementById('price').textContent = jsbook.price + '円';
document.getElementById('stock').textContent = '在庫:' + jsbook.stock;
document.getElementById('categoly').textContent = jsbook.categoly;
document.getElementsByClassName("cat").textContent = jsbook.cat;
</script>
</body>
</html>
No.1ベストアンサー
- 回答日時:
とにかくidは2箇所以上に使えないので文法としてまちがっています
<script>
var jsbook = {title:'JavaScript入門', price:2500, stock:3, categoly:'書籍', cat:'付属品',};
window.addEventListener('DOMContentLoaded', function(e){
[].forEach.call(document.querySelectorAll('.title'),function(x,y){
x.textContent=jsbook.title;
document.querySelectorAll('.price')[y].textContent = jsbook.price + '円';
document.querySelectorAll('.stock')[y].textContent = '在庫:' + jsbook.stock;
document.querySelectorAll('.categoly')[y].textContent = jsbook.categoly;
document.querySelectorAll('.cat')[y].textContent = jsbook.cat;
});
});
</script>
<section>
<table>
<tr>
<td>title</td>
<td>categoly</td>
<td>price</td>
<td>stock</td>
<td>cat:ここだけClassName</td>
</tr>
<tr>
<td class="title"></td>
<td class="categoly"></td>
<td class="price"></td>
<td class="stock"></td>
<td class="cat"></td>
</tr>
<tr>
<td class="title"></td>
<td class="categoly"></td>
<td class="price"></td>
<td class="stock"></td>
<td class="cat"></td>
</tr>
<tr>
<td class="title"></td>
<td class="categoly"></td>
<td class="price"></td>
<td class="stock"></td>
<td class="cat"></td>
</tr>
</table>
</section>
解答して頂きありがとうございます。
見事にやりたいことそのままです。
今回は解答して頂きありがとうございます。
機会がありましたら、またお願いします。
追記
以下の1行だけ何をやっているのか全くイメージできないです。
window.addEventListener('DOMContentLoaded', function(e)
まだDOMを利用した要素の取得を習っていないので、
(テキストで軽く読みました)
細かく説明して頂いても、こちらの知識不足で理解できないと思います。
ですが、これから習うので、どういうコードの構造になるのかを理解するために、
ヒントになるような事がありましたら簡単に説明して頂ければうれしいです。
※とりあえず、以下のサイトを参考にquerySelectorAllについて調べてみました
http://www.sirochro.com/note/js-queryselector-qu …
※お手数でしたらスルーでOKです。
※他の方よりのアドバイスがあるかもしれないので、質問はしばらく開けておきます。
No.2
- 回答日時:
> window.addEventListener('DOMContentLoaded'
これはjsをhead内や別ファイルにするとき
どこで宣言しても動くようにつけておくおまじないみたいなものです
試しにこの部分と、最後の「});」を外すと動かないのがわかると思います。
(jsをケツにもっていくと動く)
でやっていることはwindow.onload的なロード時にする処理の指示ですが
load時の処理とは画面がレンダリングされる前に動作する点が違います
(つまり動き出しが速い)
何度も解答して頂きありがとうございます。
> window.addEventListener('DOMContentLoaded'
これはjsをhead内や別ファイルにするとき
どこで宣言しても動くようにつけておくおまじないみたいなものです
試しにこの部分と、最後の「});」を外すと動かないのがわかると思います。
よくわかりました。
↓ これみたいなものですね。
window.onload = function(){
何度も解答して頂きありがとうございます。
機会がありましたら、またお願いします。
※別の方がアドバイスして下さったので、しばらく質問は開けておきます。
No.3
- 回答日時:
いずれこうしたくなる!かも?
<!DOCTYPE html>
<meta charset="UTF-8">
<title>Table</title>
<style>
tr td:first-of-type {
color: red;
width: 20em;
}
tr td:nth-of-type(2), tr td:nth-of-type(3) {
text-align: right;
}
tr td:nth-of-type(2):after {
content: "円"
}
tr td:nth-of-type(3):before {
content: "在庫:"
}
td.cat { color: blue; }
</style>
<body>
<table border="1">
<tr><th>title <th>categoly <th>price <th>stock <th>cat
</table>
<script>
const BOOKS = [
{title:'JavaScript入門', price:2500, stock:3, categoly:'書籍', cat:'付属品'},
{title:'JavaScript初級入門', price:25000, stock:2, categoly:'書籍', cat:'付属品'},
{title:'JavaScript中級入門', price:250000, stock:1, categoly:'書籍', cat:'付属品'}
];
let table = document.querySelector ('table');
BOOKS.forEach (book => {
let tr = table.insertRow (-1);
Object.keys (book).forEach (key => {
let td = tr.insertCell (-1);
td.classList.add (key);
td.textContent = book[key];
});
});
</script>
解答して頂きありがとうございます。
今のレベルでは使い方が全く理解できないです(笑)。
本当は以下のようにしたいと思っていました。
ですが、まだ知識不足なので、とりあえず同じものを2行書けるようにしたい、、、
ということで、今回の質問をさせて頂きました。
目標としていること
1)カテゴリーを「書籍」と「雑誌」の2つにわける ※クラスで分けたい
2)「付属品」の有無を「あり」と「なし」で記載できるようにする ※クラスで別けたい
3)「付属品」の内容は手作業で入力 ※いろんな「おまけ」があるのでクラス別けは不可
4)「タイトル」はidでもOK ※同じ書籍は「在庫」でカウントできるから
※捕捉に画像で張り付けておきます。
今回は解答して頂きありがとうございます。
機会がありましたら、またお願いします。
※しばらく質問はあけておきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- HTML・CSS 自身のHPにYouTube動画を貼り付けるのが出来なくなり困ってます 1 2022/11/11 10:44
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定<table>内の<td>の色を変える
-
テーブルで複数行をまとめて非...
-
<td>の中のonClick="location" で
-
JavaScriptでテーブルをクリッ...
-
ハイパーリンクを別ウインドウ...
-
動的なtableの値を取得したい
-
プルダウンで選択すると、DBの...
-
JSで、テーブルのある行のみ、...
-
JavaScriptで特定のtdタグにcla...
-
ポップアップメニュー
-
至急!GetElementById でtdの...
-
sed を使って文字列削除
-
【秀丸マクロ】検索行と、その...
-
jquery datatablesを使用 イン...
-
CSVデータをツリー表示させたい
-
「オブジェクトは、このプロパ...
-
テーブルの項目の値取得
-
\\u30ad\\u30fc\\u30dc・・・と...
-
return trueとreturn falseの用...
-
追加ボタンを押した際に ok ボ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ハイパーリンクを別ウインドウ...
-
マウスをブラウザの外に出した...
-
JavaScriptで特定のtdタグにcla...
-
特定<table>内の<td>の色を変える
-
一覧から選択した行の行番号を...
-
tableの任意行にfocusをあてる
-
プルダウンで選択すると、DBの...
-
至急!GetElementById でtdの...
-
【UWSC】HTML内のある部分を抽...
-
javascript クリックすると、あ...
-
jsで質問です。 displayプロパ...
-
javascriptで質問です。 displa...
-
クリックされた罫表セルの行番...
-
テーブルの変数について
-
別ページからOnclickでテーブル...
-
スクロールバーの表示位置を変...
-
JavaScriptでテーブルをクリッ...
-
Selenium.ChromeDriverの使い方...
-
Excelで作ったhtmlファイルのサ...
-
チェックボックスにチェックが...
おすすめ情報
解答して頂きありがとうございます。
お礼にあるやりたいことはこんな感じです。