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

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

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

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

jQuery

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

Q&A

解決済

4回答

1921閲覧

JqueryによるDOM操作に関するしつもん

peishun

総合スコア30

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2016/04/13 06:07

編集2016/04/13 06:40

jqueryの超初心者です

jsonから読み込んだデータをもとに<li>を作成して<ul>オブジェクトに追加するという処理を行っています。

Javascript

1var ul = $('<ul>'); 2 3for (var i = 0; i < json.length; i++) { 4 ul.append('<li><a href="' + json[i].image.replace('.jpg', '_big.jpg') + '"><img src="' + json[i].image + '" width="150" height="90"></a><br><p>' + json[i].caption + '</p></li>'); 5}

aタグにクリックイベントを登録するために、これを各要素を個別に作成した後に、<li>に追加する形に修正したいと思い以下のコードを実装しました。

JavaScript

1var ul = $('<ul>'); 2 3for (var i = 0; i < json.length; i++) { 4 5var img = $('<img>'); 6img.src = json[i].image; 7img.width = "150"; 8img.height = "90"; 9 10var a = $('<a>'); 11a.href = json[i].image.replace('.jpg', '_big.jpg'); 12a.append(img); 13//aタグにクリックイベント登録 14 15var li = $('<li>'); 16li.append(a); 17li.append('<br><p>' + json[i].caption + '</p>'); 18 19ul.append(li); 20 21}

しかし、このような実装をしても変更前と同じように動作しません。
どこが誤っているのかわかる方ご教授お願いします。

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

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

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

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

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

guest

回答4

0

JSON はただの文字列なので JSON.parsejQuery.parseJSON でパースしなければ Object 型にはなりません。
実際にはパース出来ているのかもしれませんが、変数名が json のまま(パースしたら JSON ではありません)なので念のため。

$('<img>')$('<a>') は jQuery オブジェクトなので [0] を付与して初めて DOM の要素ノードを参照できます。
最も、DOM の要素ノードが必要なだけなら createElement を使っても良いように思われますが…。

Re: peishun さん

投稿2016/04/13 07:23

編集2016/04/13 07:23
think49

総合スコア18162

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

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

peishun

2016/04/14 00:35

0を付与しないと要素を参照できないのですね。勉強になりました。
guest

0

あとから追加する要素にクリックイベントを付けるのであれば、jQuery().on() が使えます。

JavaScript

1var ul = $( '<ul>' ); 2for ( var i = 0; i < json.length; i++ ) { 3 ul.append( '<li><a href="' + json[ i ].image.replace( '.jpg', '_big.jpg' ) + '"><img src="' + json[ i ].image + '" width="150" height="90"></a><br><p>' + json[ i ].caption + '</p></li>' ); 4} 5$( 'body' ).append( ul ); 6 7$( document ).on( 'click', 'a', function( e ) { 8 // クリックに割り当てたイベント 9});

【jQuery 便利なonを使おう(on click) - Qiita】
http://qiita.com/shizuma/items/d561f37f864c3ebb5096

【.on() | jQuery API Documentation】(公式リファレンス)
http://api.jquery.com/on/

投稿2016/04/13 15:09

kei344

総合スコア69400

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

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

peishun

2016/04/14 00:41 編集

なるほど、後から要素を指定してクリックイベントを登録できるんですね。勉強になりましたありがとうございます。ただ、jsonから取得したデータをクリックイベント登録時に用いたいのでこの方法ではできないようです
guest

0

2番目のスクリプトの冒頭で・・・

var ul = $('<ul>');

として <ul> 要素を作成していますが、これをページ内に追加しましたか?
スクリプトで動的に作成した要素は、jQuery.append() などでDOM要素ツリーのどこかに入れてあげないと、画面に表示されません。
例えば次のようにすると body タグの末尾に追加できます。

$('body').append(ul);

ご参考になれば。

投稿2016/04/13 09:40

tkanda

総合スコア2425

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

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

peishun

2016/04/14 00:32

ご指摘ありがとうございます。ただ、その操作はすでに行っていました。それも記載すべきでした。申し訳ないです。
guest

0

ベストアンサー

javascript

1var li = $('li');

こうでは?

javascript

1var li = $('<li>');

追記:
think49さんの回答も踏まえて、こんな風に書くとよいかも。

javascript

1var img = $('<img>', { 2 src : json[i].image, 3 width : "150", height : "90" 4}); 5var a = $('<a>', { 6 href : json[i].image.replace('.jpg', '_big.jpg') 7}); 8a.append(img[0]); // appendされるときはobj[0]

投稿2016/04/13 06:28

編集2016/04/13 09:11
tkturbo

総合スコア5572

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

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

peishun

2016/04/13 06:34

ありがとうございます。そこは気づきませんでした。修正したら少し改善しました。しかしまだ完全に期待通りの動作をしないので誤りが残っていると思われます。
peishun

2016/04/14 00:51 編集

わかりやすくコードを書いてくださりありがとうございます。無事解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問