将“this”添加到 jQuery 中“每个”的父堆栈

Posted

技术标签:

【中文标题】将“this”添加到 jQuery 中“每个”的父堆栈【英文标题】:Adding "this" to the parents stack for "each" in jQuery 【发布时间】:2011-02-03 05:37:37 【问题描述】:

这个问题有点两部分。首先,标题问题。这是我得到的:

// 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】:

对于第一个问题,可以使用.andSelf方法:

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

你必须注意一点,$crumb 变量是本地范围的,所以它会在你each 循环的每次迭代中初始化。

对于您的第二个问题,是的,您可以定义一个函数来完成each 回调的工作,您只需传递对它的引用,而不是调用它(删除括号):

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

【讨论】:

不错!谢谢。您能否推荐参考调用/不调用函数(如崩溃)?我想了解更多 =) 哦,关于您的解决方案还有一个有趣的小事实。它颠倒了堆栈的顺序!使用 reverse() 或追加(而不是前置)很容易解决。

以上是关于将“this”添加到 jQuery 中“每个”的父堆栈的主要内容,如果未能解决你的问题,请参考以下文章

jQuery的事件委托和this$(this)

jQuery 将文本添加到 URL 的末尾

试图在每个语句中获取 this 的父级

如何使用 jquery 将工具提示添加到“td”?

如何使用jQuery将Class添加到表内每个tr中的第一个td

使用 jquery 计算特定元素并将计数添加到类名