Добавление «этого» в родительский стек для «каждого» в jQuery - PullRequest
3 голосов
/ 01 апреля 2010

Этот вопрос немного двусторонний. Сначала заглавный вопрос. Вот что у меня есть:

// Report all of the parents
$(this).parents().each(function(i){

    // Collect the parts in a var
    var $crumb = '';

    // Get the tag name of the parent
    $crumb += "<span class='tagName'>"+this.tagName+"</span>";

    // And finally, report it
    $breadcrumbs.prepend($crumb);

});

К сожалению, это не включает сам фактический элемент, только родителей. Есть ли способ сказать что-то вроде "это и родители"?

Теперь второй вопрос. Если бы я не смог добавить в стек, как бы я отделил кишки этой функции от другой функции, сохранив при этом способность «this»? Было бы что-то вроде:

// Function to report the findings
function crumble(e){

    // Collect the parts in a var
    var $crumb = '';

    // Get the tag name of the parent
    $crumb += "<span class='tagName'>"+this.tagName+"</span>";

    // And finally, report it
    $breadcrumbs.prepend($crumb);

};
$(this).parents().each(crumble());

Заранее спасибо за ваше время!

1 Ответ

7 голосов
/ 01 апреля 2010

Для первого вопроса вы можете использовать метод .andSelf:

$(this).parents().andSelf().each(function () {
  // ..
});

Вы должны кое-что заметить, переменная $crumb имеет значение локально в области , поэтому она будет инициализироваться при каждой итерации цикла each.

Для вашего второго вопроса, да, вы можете определить функцию, которая выполняет функцию обратного вызова each, вам просто нужно передать ссылку на нее, а не вызывать ее (удалить парены):

$(this).parents().each(crumble);
...