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

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

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

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

Q&A

解決済

4回答

5118閲覧

JQuery appendされる順番がおかしい?

Marbow

総合スコア55

jQuery

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

1グッド

0クリップ

投稿2017/01/25 02:03

とあるデータを表の形で表示するようなコードを書いているのですが、どうも.appendしているデータが順番に並んでいないようなのです。

JQuery

1<html lang="ja"> 2<body> 3<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 4<div id="test"></div> 5 6<script lang="javascript"> 7<!-- 8$("#test").empty(); 9$("#test").append("<table>\n"); 10$("#test").append("<tr><th>項目1</th><th>項目2</th><th>項目3</th></tr>\n"); 11$("#test").append("</table>\n"); 12//--> 13</script> 14</body> 15</html>

のようなコードで、<table>の中に<tr>,<td>がおさまってほしいのですが、DOM Explorerで見てみると<tr><table>の外に出てしまっています。

どうしてこのような現象が起きるのでしょうか??

#実際にはもう少し込み入ったコードですが、やりたいことはこんな感じです。

kura👍を押しています

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

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

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

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

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

guest

回答4

0

ベストアンサー

jQuery.appendはノードを挿入するものであり、テキストを挿入するものではありません。
$("#test").append("<table>\n")が実行された場合、その時点でtableの閉じタグがセットで追加され、完結してしまいます。やりたいならtableのノードを作成してからまるごとappendするべきでしょう。

JavaScript

1var $node = $("<table></table>"); 2$node.append("<tr><th>項目1</th><th>項目2</th><th>項目3</th></tr>"); 3$("#test").append($node);

投稿2017/01/25 02:15

masaya_ohashi

総合スコア9206

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

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

Marbow

2017/01/25 02:37

なるほど! てっきり任意のテキストを挿入するものだと誤解していました。 参考にしていたページがよろしくなかったようです。理屈が判れば対応もできます。 ありがとうございました!
guest

0

こんなふうにすると理解しやすいとおもいますよ

javascript

1<script> 2$(function(){ 3 $("#test").empty().append( 4 $('<table>').append( 5 $('<tbody>').append( 6 $('<tr>') 7 .append($('<th>').html('項目1')) 8 .append($('<th>').html('項目2')) 9 .append($('<th>').html('項目3')) 10 ) 11 ) 12 ) 13}); 14</script> 15<div id="test">hoge</div>

投稿2017/01/25 02:51

yambejp

総合スコア114769

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

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

Marbow

2017/01/25 03:47

なるほど、わかりやすいです。 ということは、masaya_ohashiさんの回答で、閉じタグがセットで追加されるとありましたが、この書き方だと閉じタグは.appendしなくてもよい、ということですね? ちょっとだけラクできそうです(^^;;
yambejp

2017/01/25 04:14

イメージ的には「$('<table>')」は document.createElement('table')のような感じで dom的な考え方をすれば閉じタグは不要です masaya_ohashiさんはあくまでテキストを#testにappendしてるので 似たように見えますが、考え方は180度違います (またテキストだとしても閉じタグはある程度まで省略可能です)
guest

0

masaya_ohashiさんの回答で完結していますが、
私は視認しやすいように以下のように書きます。

もっと規模がでかくなったりするなら、
追加したいhtml(dom)を別ファイルで保存し、
テンプレートエンジン + ajaxで読み込んだりします。
さらに規模がでかくなるならReactやRiot等のライブラリという名のフレームワークを使用したりします。

ヒアドキュメントが標準で備われば、もっとキレイにかけるのでしょうね。

JavaScript

1$('#test').append( 2 '<table>' + 3 '<tr>' + 4 '<th>項目1</th>' + 5 '<th>項目2</th>' + 6 '<th>項目3</th>' + 7 '</tr>' + 8 '</table>' 9);

投稿2017/01/25 02:32

mukkun

総合スコア882

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

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

Marbow

2017/01/25 02:46

やはり視認性は大事ですよね(特に後々)。 今の環境はリソースが豊かなのはわかっているのに、8ビット時代のクセが出て詰めに詰めてしまうことがまだあります(^^;;
guest

0

$("#test").empty() .append("<table />") .find("table") .append("<tr><th>項目1</th><th>項目2</th><th>項目3</th></tr>") ;

とか

投稿2017/01/25 02:27

編集2017/01/25 02:29
deigo

総合スコア200

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

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

Marbow

2017/01/25 02:44

こんな方法もあるんですね。まだまだ知らないことだらけです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問