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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

Q&A

解決済

3回答

2382閲覧

ボタンを押してテーブルを複製させたい

退会済みユーザー

退会済みユーザー

総合スコア0

HTML5

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

0グッド

0クリップ

投稿2017/07/04 07:44

編集2017/07/04 08:06

タイトルの通りですが、「テーブル追加」のようなボタンを押すと、テーブルが追加されるような仕組みを作りたいです。
テーブル
(内容は気にしないでください、例です)
「テーブル追加」ボタンを押すとまるっとQ1~選択肢4までのテーブルがQ1のテーブルの下に追加される感じにしたいです

調べたのですが、テーブルの行列追加削除ばかり出てきて、テーブルをまるっと追加、というのは探しきれなかったです。
出来ないのでしょうか?

JavaScriptで出来ると聞いたのですが、JavaScriptで実現できますか?
実現できればPHPでも何でも良いのですが…。

よろしくお願いします。

追記:テーブルの用途は簡単に言うとプロフィールに「趣味」とか「特技」とか追加とかの質問項目を追加していくイメージです。

Q1の次に、追加すると最初がQ2になっているととても嬉しいです。(が、そこまで贅沢は言いません;;)

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

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

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

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

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

kei344

2017/07/04 07:47

質問文にHTMLを追加されてはいかがでしょうか。また、どのような用途のテーブルなのかによっては回答が微妙に変わる気がするのですが、具体的に何をしたいのかを追加されてはいかがでしょうか。
yambejp

2017/07/04 07:53

Q1の下に同じQ1が来てよいのですか?Q2とかなにか工夫はいりますか?またテーブルの2列めは空白行でよいのでしょうか?
退会済みユーザー

退会済みユーザー

2017/07/04 08:01

用途については機密もあるので控えさせていただきます。テーブルを増やすことだけを教えていただければと思います、すみません。
退会済みユーザー

退会済みユーザー

2017/07/04 08:03 編集

Q1の次にQ2が来るのが理想です。カウント変数か持ってなんとかならないかなと軽く考えていました。テーブルの2列目は空白で問題ないです(ユーザに記載してもらう仕様)
guest

回答3

0

ベストアンサー

列や行を追加できるのですから、table要素ノードも当然追加できます。
基礎的なDOM APIなので、DOMを学んでください。

Node#cloneNode

HTML

1<table> 2 <tbody> 3 <tr> 4 <td>Q1.</td> 5 <td></td> 6 </tr> 7 <tr> 8 <td>選択肢1</td> 9 <td></td> 10 </tr> 11 <tr> 12 <td>選択肢2</td> 13 <td></td> 14 </tr> 15 <tr> 16 <td>選択肢3</td> 17 <td></td> 18 </tr> 19 <tr> 20 <td>選択肢4</td> 21 <td></td> 22 </tr> 23 <tr> 24 <td></td> 25 <td></td> 26 </tr> 27 </tbody> 28</table> 29 30<input id="add-table" type="button" value="テーブル追加"> 31 32<script> 33'use strict'; 34document.getElementById('add-table').addEventListener('click', function (event) { 35 var table = event.target.ownerDocument.querySelector('table'); 36 37 table.parentNode.insertBefore(table.cloneNode(true), table.nextSibling); 38}, false); 39</script>

DOM Level 2 HTML

Q1の次にQ2が来るのが理想です。

HTMLTableElement, HTMLTableSectionElement, HTMLTableRowElement, HTMLTableCellElement の API を使用。

HTML

1<table class="foo"> 2 <tbody> 3 <tr> 4 <td>Q1.</td> 5 <td></td> 6 </tr> 7 <tr> 8 <td>選択肢1</td> 9 <td></td> 10 </tr> 11 <tr> 12 <td>選択肢2</td> 13 <td></td> 14 </tr> 15 <tr> 16 <td>選択肢3</td> 17 <td></td> 18 </tr> 19 <tr> 20 <td>選択肢4</td> 21 <td></td> 22 </tr> 23 <tr> 24 <td></td> 25 <td></td> 26 </tr> 27 </tbody> 28</table> 29 30<input id="add-table" type="button" value="テーブル追加"> 31 32<script> 33'use strict'; 34document.getElementById('add-table').addEventListener('click', function (event) { 35 var table = event.target.ownerDocument.querySelectorAll('table.foo'), 36 lastTable = table[table.length - 1], 37 nextTable = lastTable.cloneNode(true), 38 textNode = nextTable.tBodies[0].rows[0].cells[0].firstChild; 39 40 textNode.data = textNode.data.replace(/\d+/g, function (numberString) { return ++numberString; }); 41 lastTable.parentNode.insertBefore(nextTable, lastTable.nextSibling); 42}, false); 43</script>

Re: ton-yuki さん

投稿2017/07/04 07:56

編集2017/07/04 08:24
think49

総合スコア18166

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

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

退会済みユーザー

退会済みユーザー

2017/07/04 08:01

早速ありがとうございます。 javascriptに関しては学ぶ時間もなく、ずぶのど素人でどこから勉強していいかわからない状態でした… 色々調べてみたのですが、コードしか載ってないところが多く解析が大変でした。 (が、成果は今週中に求められているので 汗)。 DOMですね、勉強してみます。
think49

2017/07/04 08:07

コード上に登場したキーワードでWeb検索し、資料をあたって下さい。 私のコードでいえば、getElementById, parentNode, insertBefore, cloneNode, nextSibling, event.target, querySelector, ownerDocument event.target.ownerDocument は資料も少ないでしょうから、とりあえずは document に置き換えても構いません(ownerDocument を使用した理由はありますが、そこを学習すると時間がかかりそうなので)。
think49

2017/07/04 08:25

> Q1の次にQ2が来るのが理想です。 親記事に追記しました。
退会済みユーザー

退会済みユーザー

2017/07/06 01:38

ありがとうございます。 現在こちらで進めております。 コードも解析してなんとなくわかったのですが、画像にあるとおり、Q1の右側はテキストボックスにしています で、データベースに登録したく、テキストのname属性をname1,name2…みたいに、Q1,Q2と同じように連番にしたいのです。 それに挑戦しましたが上手くいきませんでした。 追加質問になってしまい申し訳ないのですが、name属性を連番にすることは出来ますでしょうか? 必要であれば質問を立て直します。 個人的には、function (numberString) { return ++numberString; }のnumberStringの扱いがいまいちぱっとしませんでした 宣言なくても引数で変数宣言出来るのはわかりました。2回目以降、numberStringはカウンタを保持していると思うのですが、このfunction内のみで有効ですよね?また、2回目以降はnumberStringが新たに宣言されているわけではないですよね?
退会済みユーザー

退会済みユーザー

2017/07/06 01:47

属性に対してやってみたことは、setAttributeでname属性に"name"+count変数 でしたが、その前に指定するドキュメントをどう書くべきか(おそらくnextTableを使用するのでしょうが…)、カウンタをどう回して、変数をsetAttribute内にどう書くのかで悩んでいます。 全然見当違いだったらご指摘ください。
think49

2017/07/06 04:54 編集

HTMLに細かい指定があるのなら、kei344さんが指摘されているようにHTMLも質問文に載せるべきだと思います。 私は画像から想像して書いているだけですので、詳細は分かりませんし、細かい部分でズレが発生するのは仕方がないでしょう。 そうしたズレに柔軟に対応するのが難しいなら、尚更に細かい情報まで質問文に入れた方がよいです。 選択肢1,2,3,4には初めから連番のinput要素を記述しておけば良いように思えますが、Q1,Q2で重複したname属性値は許されない設計なのでしょうか。 ユニークにするなら「q1-1,q1-2,q1-3 -> q2-1, q2-2, q2-3」のような感じでしょうかね…。 1. "Q1." から数字を参照し、変数 number に格納 2. rows[i].cells[1].firstChild.name = 'q' + number + '-' + i; コードを見て何のなくイメージするのではなくて、DOMを基礎から学習した上で各種関数、プロパティの使い方を覚えなければ、どこかで躓くとは思います。 https://developer.mozilla.org/ja/docs/DOM
退会済みユーザー

退会済みユーザー

2017/07/06 08:43

申し訳ありません。 当初はテーブルを増やすことさえ出来れば、あとは自分でなんとかなるだろうと考えていました。 そのためHTMLの細かい指定はしませんでした。 が、やってみて自分でなんとか出来なさそうだったので追加で質問させていただきました。 不快な思いをさせてしまい大変申し訳ありません。 基礎的な勉強をする時間が無いことと、今までの自身の経験上やってみてからのほうが身に入ったのでこうして質問させていただいています(キャッチフレーズには15分調べてわからなかったら、と書いてありますが3時間は少なくとも調べています)。 以後質問を控えるようにします。大変申し訳ありませんでした。 参照URLは学習します。
guest

0

jQuery版です

https://jsfiddle.net/jgg3mhda/

html

1<table border="1"> 2 <tr><td>Q<span class="qn">1</span>.</td><td>&nbsp;</td></tr> 3 <tr><td>選択肢1</td><td>&nbsp;</td></tr> 4 <tr><td>選択肢2</td><td>&nbsp;</td></tr> 5 <tr><td>選択肢3</td><td>&nbsp;</td></tr> 6 <tr><td>選択肢4</td><td>&nbsp;</td></tr> 7</table> 8<button>テーブル追加</button> 9<script> 10var qn = 1; 11$('button').click(function() { 12 var t = $('table:last'); 13 t.clone().insertAfter(t).find('.qn').text(++qn); 14}); 15</script>

投稿2017/07/04 09:02

naga3

総合スコア1293

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

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

退会済みユーザー

退会済みユーザー

2017/07/05 00:29

ありがとうございます!すごくすっきりしていますね…! うーん、どれを使うか悩みます…!
guest

0

複製するのはcloneNodeを利用します。

javascript

1<script> 2window.onload=function(){ 3 var b=document.querySelector("input[type=button][value=テーブル追加]"); 4 b.addEventListener('click',function(){ 5 var t=document.querySelector("table").cloneNode(true); 6 this.parentNode.insertBefore(t,this); 7 }); 8} 9 10</script> 11<table border> 12<tr><td>1</td><td>2</td></tr> 13<tr><td>3</td><td>4</td></tr> 14<tr><td>5</td><td>6</td></tr> 15<tr><td>7</td><td>8</td></tr> 16</table> 17 18<input type="button" value="テーブル追加">

投稿2017/07/04 08:20

yambejp

総合スコア114968

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

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

退会済みユーザー

退会済みユーザー

2017/07/05 00:28

ありがとうございます、下の方のと似てますけど微妙に違いますね…むむ… 勉強します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問