Контекст селектора jQuery не работает в $().find

Мой вопрос касается «этого» (контекст селектора) в функции jQuery $().find.

Мой код ниже захватывает коллекцию li. Затем использует эту коллекцию, чтобы «найти» h3. Затем добавляет элемент div после h3 и пытается использовать функцию $().data, чтобы связать новый элемент div с h3 для последующего использования.

Кто-нибудь знает, почему, когда я запускаю этот код, $(this) внутри функции данных возвращает ДОКУМЕНТ, а не li из коллекции $posts?

var $posts = $('#blog ul').children();
$posts.find("h3").after("<div></div>").data("div", $(this).parent().find('div'))

person Sean Allen Suggs    schedule 13.03.2011    source источник


Ответы (1)


да, вы подразумеваете, что вызов функции find() каким-то образом создает область видимости. Этот контекст может быть создан только внутри функции:

function(){
  this // now means the context of this function which might be window
}

если в коллекции сообщений будет только 1 h3, вы можете его кэшировать. В противном случае вы ищете метод each;

var $posts = $('#blog ul').children();
$posts.find('h3').each(function(){
  var $this = $(this);
  $this.after('<div/>').data('div', $this.parent().find('div'));
});
person Gabriel    schedule 13.03.2011
comment
спасибо, Габриэль... в какой-то момент у меня был .click(funciton(){$(this)}), брошенный в конец этой штуки, и он правильно дал мне область действия, и я действительно подразумевал для себя, что $() .data до того, как он должен делать то же самое... но теперь я вижу, что причина, по которой .click сработал, заключалась в функции(){}... спасибо! - person Sean Allen Suggs; 13.03.2011
comment
рад помочь, отметьте как ответ, если считаете, что это хранитель :) - person Gabriel; 13.03.2011