質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

611閲覧

JavaScriptで既存のtr要素の中にthを追加したい

helpmee88

総合スコア4

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2023/03/10 09:08

編集2023/03/13 01:42

実現したいこと

干渉できないHTMLの中にあるtableに項目<th>を追加したいです。

前提

Bcartというカートシステムを使い、干渉できないHTMLのページをカスタマイズしています。
知識のない状態から独学で行っている状況です。
直接htmlを触れないため、JavaScriptを使っています。
jqueryでも構わないのですが、方法が見つけられませんでした。

内容

thead要素の中に既にある<tr>の中に<th>を追加したいのですが、作成したJavaScriptを起動させると、既存</tr>の下に新しく<tr>と<th>が生成されてしまいます。
→HTMLソースの11行目
どうすれば既存<th class="__order" id="th-3">必要数</th>の直下に<th>が追加できるのでしょうか?
→HTMLソースの9~10行目の間
知識と理解不足で申し訳ないのですが、お力添えをいただけますと大変嬉しいです。
どうぞ、よろしくお願いいたします。

該当のソースコード

■作成したJavaScriptを適応させた後のhtmlソース

html

1<table id="tab-1"> 2 <thead id="p-thead"> 3 <tr> 4 <th class="__description" id="th-1">品番 / 品名 色 サイズ</th> 5 <th class="__price"> 6 <div class="__total">販売価格</div> 7 <div class="__detail">(単価 × 入数)</div> 8 </th> 9 <th class="__order" id="th-3">必要数</th> 10 </tr> 11 <tr><th>セル</th></tr> 12 </thead> 13 <tbody> 14 <tr class="__item __item--1 "> 15 <td class="__description"> 16 <h2 class="__name"> 17 ABS_BK_D00200-1000 / ABS 黒 φ10×L1000 </h2> 18 19 <div class="__spec"></div> 20 </td> 21 <td class="__price"> 22 <div class="__heading"> 23 <div class="__total">販売価格</div> 24 <div class="__detail">(単価 × 入数)</div> 25 <div class="__body"> 26 <div class="__total"><span class="c-tax-price __tax-price __is-none">1,100,000円</span></div> 27 <div class="__detail"> 28<span class="__unit-price"><span class="c-tax-price __tax-price __is-none">1,100,000円</span></span> × <span class="__quantity">1</span><span class="__unit"></span></div> 29 </td> 30 <td class="__order"> 31 <div class="__error c-alert c-alert--danger __js-add-cart-error" style="display: none;"></div> 32 <div class="__heading">注文数</div> 33 <div class="__body"> 34 <div class="__input"> 35 <input placeholder="0" class="__js-order-count __js-disabled-enter-key" name="p[1]" type="number"><span class="__spin p-spin"><span class="__minus __js-spin"></span><span class="__plus __js-spin"></span></span></div> 36 <dl class="__cart-count __js-cart-count" style="display: none;"> 37 <dt>追加済</dt> 38 <dd>0</dd> 39 </dl> 40 <div class="__notice"> 41 <dl class="__min-max-order"> 42 <dt>注文可能数</dt> 43 <dd class="__min"> 44 <span class="__title">最小</span> 45 <span class="__count">1</span> 46 </dd> 47 </dl> 48 49 </td> 50 </tr> 51 </tbody> 52</table>

■作成したJavaScriptソース

js

1// thead要素を取得 2var theadElem = document.getElementById('p-thead'); 3// thead要素にtr要素(行) 4var trElem = theadElem.insertRow(); 5// th要素をtr要素に追加 6trElem.appendChild(cellElem);

修正内容と現在の状況

■現在のHTML状況

html

1<thead id="p-thead"> 2 <tr> 3 <th class="__description" id="th-1">品番 / 品名 色 サイズ</th> 4 <th class="__price"> 5 <div class="__total">販売価格</div> 6 <div class="__detail">(単価 × 入数)</div> 7 </th> 8 <th class="__order" id="th-3">必要数</th>undefined 9 </tr> 10 </thead>

■適応したJavaScript

js

1// thead要素を取得 2var theadElem = document.getElementById('p-thead'); 3// th要素を追加 4var cellElem = document.querySelector('#th-3').after(cellElem); 5// th要素にテキストを追加 6cellElem.appendChild(document.createTextNode('セル')); 7// th要素をtr要素に追加 8trElem.appendChild(cellElem);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

既存の<tr>に追加したいのに insertRow() (新たな<tr>を挿入する)はおかしいですね。

js

1const cellElem = document.createElement('th'); 2cellElem.textContent = 'セル'; 3document.querySelector('#th-3').after(cellElem);

または

js

1document.querySelector('#th-3').insertAdjacentHTML('afterend', '<th>セル</th>');

などでいいのではないでしょうか。

投稿2023/03/10 09:18

編集2023/03/13 02:16
int32_t

総合スコア20839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

helpmee88

2023/03/13 01:37

早々にご回答いただきましてありがとうございます! insertRow()の使い方を理解できておりませんでした。 ありがとうございます。 ご教授いただいた内容で適応してみたのですが、正しい適応方法がが分からず、未定義エラーがでてしまい、それを正すために定義をし直すことを繰り返し、現在は「appendChild」の未定義エラーを直すことができず煮詰まってしまいました。 HTMLには、<th>タグは挿入されずに「undefined」が表示されている状態です。 教えていただいた上で大変恐縮ですが、下記のjsの間違いをご指摘いただけませんでしょうか? お手を煩わせてしまい申し訳ございません。 どうぞ、よろしくお願いいたします。 ■現在のHTML状況 ```html <thead id="p-thead"> <tr> <th class="__description" id="th-1">品番 / 品名 色 サイズ</th> <th class="__price"> <div class="__total">販売価格</div> <div class="__detail">(単価 × 入数)</div> </th> <th class="__order" id="th-3">必要数</th>undefined </tr> </thead> ``` ■適応したJavaScript ```js // thead要素を取得 var theadElem = document.getElementById('p-thead'); // th要素を追加 var cellElem = document.querySelector('#th-3').after(cellElem); // th要素にテキストを追加 cellElem.appendChild(document.createTextNode('セル')); // th要素をtr要素に追加 trElem.appendChild(cellElem); ```
int32_t

2023/03/13 01:44

<th> を作る処理はできていて挿入するところだけが問題なのかと勘違いしてました。 const cellElem = document.createElement('th'); cellElem.textContent = 'セル'; document.querySelector('#th-3').after(cellElem); こんな感じだと思います。
int32_t

2023/03/13 01:46

document.querySelector('#th-3').insertAdjacentHTML('afterend', '<th>セル</th>'); の1行でもできますね。
helpmee88

2023/03/13 01:52

お忙しい中、早急ににご回答いただきましてありがとうございます。 素早い回答に感動いたしました! ご教授いただいた内容で適応したところ、希望していたようにセルを挿入することができました。 大変勉強になり、助かりました。 これから、教えていただいたソースを調べながらひとつひとつ理解させていただきます。 本当に、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問