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

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

ただいまの
回答率

90.48%

  • JavaScript

    16957questions

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

  • jQuery

    6915questions

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

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

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 679

peishun

score 19

jqueryの超初心者です

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

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

for (var i = 0; i < json.length; i++) {
   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>');
}

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

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

for (var i = 0; i < json.length; i++) {

var img = $('<img>');
img.src = json[i].image;
img.width = "150";
img.height = "90";

var a = $('<a>');
a.href = json[i].image.replace('.jpg', '_big.jpg');
a.append(img);
//aタグにクリックイベント登録

var li = $('<li>');
li.append(a);
li.append('<br><p>' + json[i].caption + '</p>');

ul.append(li);

}


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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+1

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

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

Re: peishun さん

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/14 09:35

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

    キャンセル

checkベストアンサー

0

var li = $('li');


こうでは?

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/13 15:34

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

    キャンセル

  • 2016/04/14 09:36 編集

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

    キャンセル

0

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

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

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

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

ご参考になれば。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/14 09:32

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

    キャンセル

0

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

var ul = $( '<ul>' );
for ( var i = 0; i < json.length; i++ ) {
    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>' );
}
$( 'body' ).append( ul );

$( document ).on( 'click', 'a', function( e ) {
    // クリックに割り当てたイベント
});

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/14 09:31 編集

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

    キャンセル

関連した質問

同じタグがついた質問を見る

  • JavaScript

    16957questions

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

  • jQuery

    6915questions

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