我试图在每个li上获取rel的值并将其传递给.getJSON函数。然后我想将回调中的thumbnail_url值添加到li后代的image标签中。我的问题是如何将$(this)对象传递给回调函数。似乎$(this)为空。
$('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>
答案 0 :(得分: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;
});
});
原因是因为this
的回调与.each()
的回调不同,而$.getJSON()
的回调不同。
答案 1 :(得分: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;
}
});
});