JQuery найти + длина / размер возвращает 0 - PullRequest
1 голос
/ 01 июля 2011

У меня есть некоторые div, созданные динамически следующим образом:

 //here goes some loop, and everything works fine
 $("#result_main_search").append('<div class="singleresult_main_search">
 <a href="http://somesite.com/" class="linktosight">'
  + SightsList[i]+ '</a>  –  ' + 
'<img src="/images/balloon.gif" rel="'+ i 
 +'" class="balloon_img_main_search" /></div>');    

После этого цикла я пытаюсь установить атрибут href для каждой ссылки:

$('.singleresult_main_search').each(function() {
  $.get("_ajax_get_sight_link.php", {'id':$("img", this).attr('rel')}, 
   function(data) { 
     alert($(this).find('.linktosight').length);
     $(this).find('a').attr('href', data);    
     alert(data);
   });
})

_ajax_get_sight_data.php принимает идентификатор,возвращает ссылку (оповещение (данные) работает нормально) .Но предупреждение, которое сообщает, сколько элементов .linktosight находится в текущем div, всегда дает 0 (говоря всегда, я имею в виду каждый раз, когда он находит один из моих сгенерированных div).Я пробовал .size(), $(this).find('a') с тем же результатом.Итак, как мне настроить его на работу?

1 Ответ

1 голос
/ 01 июля 2011

this внутри обратного вызова будет указывать на jqXHR-объект, а не на зацикленные элементы.

Вы можете создать замыкание:

$('.singleresult_main_search').each(function() {
var $this=$(this);
//.....
});

.. и использовать его внутри обратного вызова:

function(data) { 
     alert($this.find('.linktosight').length);
   });

$. Proxy () также может быть вариантом, предложенным Джеком Франклином

...