Контекстът на селектора на 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