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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

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

JavaScript

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

jQuery

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

Q&A

3回答

5768閲覧

編集画面で表に行を追加する方法

kazu56

総合スコア51

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

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

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2016/06/14 02:28

編集2016/06/14 02:29

編集画面で表に行を追加する場合、他の方がどのようにやっているかが知りたいです。

具体的には、行追加ボタンを押すと最後尾に行が追加されて、更新ボタンで保存される画面です。

イメージ説明

行追加の方法は思いつくところで以下があると思います。

①jQueryで追加行を作りテーブルの最後尾にappendする。
下記のようなイメージ。

$('table tbody tr').append( $('<tr><td><input></td>td></td><td><input></td></tr>') );

②追加行を事前に別の箇所に作りdisplay:none隠しておき、追加の際はそれを使う。
下記のようなイメージ。

<div style="display:none"> <tr><td><input></td>td></td><td><input></td></tr> </div>
$('table tbody tr').append( $('div').clone() );

③jQueryで表から行を取得して追加してそこの値を消す。
下記のようなイメージ。

$('tbody') //表から取得して追加 .append( $('tr').clone() ) //値を消す .find('tr:last input') .each(function(){ $(this).val('') })

自分の感想としては、①と②だと表が二重管理になるところがデメリットだと感じています。
また、①はjsでhtmlを管理するのが面倒だと感じています。
(jQueryのdomの書き方に関わらず)

③は行が最低でも1行あることを前提としているので、行がない場合は使えません。

いわゆるスタンダードな方法や、他の方法や、自分はこうやっているなど教えてください。

よろしくお願いします。

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

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

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

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

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

masaya_ohashi

2016/06/14 02:47

初期段階のテーブルにはデータが入っていることはありますか?このページにアクセスしたときは必ずテーブルの行は0件ですか?
kazu56

2016/07/09 12:57

返事遅れてすみません。データがないこともあります。
guest

回答3

0

雛形DOM

個人的には①を使います。
DocumentFragmentな雛形となるDOMを生成し、appendChild します。
1行目が存在するなら cloneNode でノードをコピーして内部コンテンツを書き換えることも検討します(③ですね)。
jQuery なら jQuery('<tr><td><input></td>td></td><td><input></td></tr>') がありますが、innterHTML 的な手法が好きでないので個人的には敬遠してます。

template 要素

HTML5 で拡張された template 要素を使うと楽に雛形DOMを扱うことが出来ます。
ただし、IE11 が未対応なので template.content, document.importNode が存在しなければ、template.firstElementChild.cloneNode(true) で代用する等の工夫が必要です。
(Can I use の情報と違い、なぜか私の手元の IE11 では template 要素を扱えたのが謎ですが…)

HTML

1<table id="sample"> 2 <thead> 3 <tr> 4 <th>球団名</th> 5 <th>選手名</th> 6 <th>削除</th> 7 </tr> 8 </thead> 9 <tbody> 10 <template id="sample-tr"><tr> 11 <td><input type="text" name="baseball-team-name" /></td> 12 <td><input type="text" name="player-name" /></td> 13 <td><input type="submit" name="delete" value="削除" /></td> 14 </tr></template> 15 </tbody> 16</table> 17<script> 18'use strict'; 19function getTemplateNode (template) { 20 if ('content' in template && typeof document.importNode === 'function') { 21 return document.importNode(template.content, true); 22 } 23 24 var df = template.ownerDocument.createDocumentFragment(); 25 26 for (var i = 0, childNodes = template.childNodes, l = childNodes.length; i < l; ++i) { 27 df.appendChild(childNodes[i]); 28 } 29 30 return df; 31} 32 33var tr = getTemplateNode(document.getElementById('sample-tr')); 34document.getElementById('sample').tBodies[0].appendChild(tr); 35</script>

Re: kazu56 さん

投稿2016/06/14 05:53

編集2016/06/14 06:57
think49

総合スコア18162

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

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

0

最終行をクローンして使えば構造的にも楽では?
(もちろん同じ構造の行でなければ使えないですが)

<script> $(function(){ $('input[value=add]').click(function(){ $('table tbody tr:last-child').clone().appendTo($('table tbody')) })}); $(document).on('click','input[value=del]',function(){ if($(this).closest('tr').siblings().length >0){ $(this).closest('tr').remove() } }); </script> <input type="button" value="add"> <table> <tbody> <tr><td><input></td><td>aaa</td><td><input type="button" value="del"></td></tr> </tbody> </table>

投稿2016/06/14 03:37

yambejp

総合スコア114784

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

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

0

Pure jQueryならデメリット承知で①を使います。
②、③はコードを一見すると何をやっているかわからないですが、①は「テーブルの最終行に行を追加する」という行為がそのままコードに記述されているのでシンプルです。

投稿2016/06/14 02:38

yohira0616

総合スコア255

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問