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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

Q&A

解決済

2回答

2904閲覧

javascriptのテーブル作成時、rowspanを変数にするとテーブルが崩れてしまう。

Tera0724

総合スコア18

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

0グッド

0クリップ

投稿2021/05/18 08:25

編集2021/05/18 08:32

現在、美容室の予約状況を確認できるシステムを作成しています。そこで、テーブルを表示させて見やすくしようと考えました。施術メニューによって時間が異なるため、時間感覚はそのままでメニューに合わせて時間カラム以外のカラムは結合されるようにしたいと考え以下のプログラムを作成しました。

javascript

1 let schedule_Html = `<caption class="schedule_title">${day + '日'}</caption>`; 2 schedule_Html += `<tr style="text-align: center;">`; 3 // 予約状況テーブルのカラム作成 4 schedule_Html += `<td class="schedule_columns" width=200>${schedule_tb_columns[0]}</td>`; 5 schedule_Html += `<td class="schedule_columns" width=250>${schedule_tb_columns[1]}</td>`; 6 schedule_Html += `<td class="schedule_columns" width=255>${schedule_tb_columns[2]}</td>`; 7 schedule_Html += `</tr>`; 8 9 schedule_Html += '<tbody class="scroll">'; 10 var flag = 0; 11 for (let i=0; i < time_schedule.length; i++){ 12 schedule_Html += '<tr style="text-align: center;">'; 13 // 時間表記部分のrowを作成 14 schedule_Html += `<td class="schedule_time_td" width=200>${time_schedule[i]}</td>`; 15 var rowspan_index = 2; 16 if (day_schedule[i][1] == "1"){ 17 if (flag > 0){ 18 // 結合したrow数分減らす 19 flag -= 1; 20 } 21 else if (day_schedule[i][0] == null){ 22 schedule_Html += `<td class="schedule_time_td" width=250></td>`; 23 schedule_Html += `<td class="schedule_time_td" width=255></td>`; 24 } 25 else if (day_schedule[i][0] != null){ 26 schedule_Html += `<td class="schedule_time_td" width=250>${day_schedule[i][0] + '様'}</td>`; 27 schedule_Html += `<td class="schedule_time_td" width=255>${day_schedule[i][2]}</td>`; 28 } 29 } 30 else{ 31 // 時間表記部分のindexを作成 32 if (flag == 0){ 33 schedule_Html += `<td rowspan=2 class="schedule_time_td" width=250>${day_schedule[i][0] + '様'}</td>`; 34 schedule_Html += `<td rowspan=2 class="schedule_time_td" width=255>${day_schedule[i][2]}</td>`; 35 flag = rowspan_index - 1; 36 } 37 } 38 schedule_Html += '</tr>'; 39 } 40 schedule_Html += '</tbody>'; 41 return schedule_Html;

上記リストのday_scheduleは二次元配列となっていて、各要素に[予約者名、施術時間(何セル分か)、メニュー名]が保存されています。
([[予約者名、施術時間(何セル分か)、メニュー名], [予約者名、施術時間(何セル分か)、メニュー名], ...])
上記のようにrowspanの値を数字にすると以下の画像のようにイメージ通りの出力となります。
イメージ説明
しかし、rowspanの値を変数(上記のプログラムではrowspan_index)にした場合名前、メニューの蘭が以下の画像のようにずれてしまいます。
イメージ説明
rowspanに入っている値は共に2だと考えられるため、現状原因がわからない状態です。
変数を入れた場合にうまくいかない原因について教えていただきたいです。
よろしくお願いします。

追記

うまくいかなかった場合のコードです。

let schedule_Html = `<caption class="schedule_title">${day + '日'}</caption>`; schedule_Html += `<tr style="text-align: center;">`; // 予約状況テーブルのカラム作成 schedule_Html += `<td class="schedule_columns" width=200>${schedule_tb_columns[0]}</td>`; schedule_Html += `<td class="schedule_columns" width=250>${schedule_tb_columns[1]}</td>`; schedule_Html += `<td class="schedule_columns" width=255>${schedule_tb_columns[2]}</td>`; schedule_Html += `</tr>`; schedule_Html += '<tbody class="scroll">'; var flag = 0; for (let i=0; i < time_schedule.length; i++){ schedule_Html += '<tr style="text-align: center;">'; schedule_Html += `<td class="schedule_time_td" width=200>${time_schedule[i]}</td>`; var rowspan_index = 2; if (day_schedule[i][1] == "1"){ if (flag > 0){ // 結合したrow数分減らす flag -= 1; } else if (day_schedule[i][0] == null){ schedule_Html += `<td class="schedule_time_td" width=250></td>`; schedule_Html += `<td class="schedule_time_td" width=255></td>`; } else if (day_schedule[i][0] != null){ schedule_Html += `<td class="schedule_time_td" width=250>${day_schedule[i][0] + '様'}</td>`; schedule_Html += `<td class="schedule_time_td" width=255>${day_schedule[i][2]}</td>`; } } else{ // 時間表記部分のindexを作成 if (flag == 0){ schedule_Html += `<td rowspan=rowspan_index class="schedule_time_td" width=250>${day_schedule[i][0] + '様'}</td>`; schedule_Html += `<td rowspan=rowspan_index class="schedule_time_td" width=255>${day_schedule[i][2]}</td>`; flag = day_schedule[i][1]-1; } } schedule_Html += '</tr>'; } schedule_Html += '</tbody>';

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

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

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

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

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

maisumakun

2021/05/18 08:28

> rowspanの値を変数(上記のプログラムではrowspan_index)にした場合 この場合はどのようなコードを書きましたか?(単に書き間違えた、ということも考えられます)
Tera0724

2021/05/18 08:35

回答ありがとうございます。 うまくいかなかった場合のコードを追記しました。 変数はint型で、rowspan=rowspan_indexと直接繋ぎました。
guest

回答2

0

schedule_Html += '<td rowspan=rowspan_index class="schedule_time_td" ```は ```ここに言語を入力 schedule_Html += '<td rowspan='+rowspan_index+' class="schedule_time_td" ```でしょうか?

投稿2021/05/18 09:17

yhasegawa55

総合スコア189

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

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

Tera0724

2021/05/19 01:35

コメントありがとうございます。囲い方についてはテンプレートリテラルを使用していました。
guest

0

ベストアンサー

javascript

1schedule_Html += `<td rowspan=rowspan_index (後略)`

このコードでは、「rowspanの値を変数に」できていませんrowspanrowspan_indexという値(変数ではなく、書いた通りの文字列)を設定した扱いになっています。

投稿2021/05/18 08:34

編集2021/05/18 08:35
maisumakun

総合スコア146018

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

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

Tera0724

2021/05/18 08:51

回答ありがとうございます。 「`」を使った書き方ではなく、「'」に変更したら流れるようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問