5

各 li の rel の値を取得して、それを .getJSON 関数に渡そうとしました。次に、コールバックから li の子孫のイメージ タグに、thumbnail_url の値を追加します。私の質問は、どうすれば $(this) オブジェクトをコールバック関数に渡すことができるかということです。$(this) が null のようです。

$('ul.sample li').each(function () {

        var url = 'http://sampleurl/api/url?' + $(this).attr('rel');

        $.getJSON(url, function (data){
            $(this).find('img').attr('src') = data.thumbnail_url;
    })
});

HTML:

<ul class="sample">
   <li rel="value1">
       <img src="">
   </li>
   <li rel="value2">
       <img src="">
   </li>
</ul>
4

2 に答える 2

8

コールバックの外側に割り当てて(設定しているようにself)、コールバックの内側で使用します(設定した変数を参照して):

$('ul.sample li').each(function () {

    var self = $(this); // using self to store $(this)
    var url = 'http://sampleurl/api/url?' + self.attr('rel');

    $.getJSON(url, function (data) {
        // now retrieving self - it is accessible from the callback
        self.find('img').attr('src') = data.thumbnail_url;
    });

});

その理由は、 がcallback for とcallback thisfor で異なるためです。.each()$.getJSON()

于 2012-05-22T01:58:00.767 に答える
7

$.ajaxの代わりに使用する場合は、次のオプション$.getJSONを使用できます。context

$('ul.sample li').each(function () {
    var url = 'http://sampleurl/api/url?' + $(this).attr('rel');
    $.ajax({
        url : url,
        dataType : 'json',
        context : this,
        complete : function (data) {
            // 'this' will be what you passed as context 
            $(this).find('img').attr('src') = data.thumbnail_url;
        }
    });
});
于 2012-05-22T02:12:02.467 に答える