【问题标题】:Get parent of element in jQuery each loop [duplicate]在每个循环中获取jQuery中元素的父级[重复]
【发布时间】:2017-02-16 20:14:13
【问题描述】:

我完全被这件事难住了。我在页面上有三个元素,其类为.topic-link

<div id="parent1">
  <a href="#" class="topic-link"></a>
</div>
<div id="parent2">
  <a href="#" class="topic-link"></a>
</div>
<div id="parent3">
  <a href="#" class="topic-link"></a>
</div>

我可以在 JS 控制台中运行 $('.topic-link').eq(0).parent(); 并返回正确的父级。但是当我遍历它们时,每次都会得到一个空对象。

$('.topic-link').each( () => {
  console.log($(this).parent());
});

// returns 3 empty objects 

【问题讨论】:

标签: javascript jquery


【解决方案1】:

来自@charlietfl 的回答:你得到这种行为是因为箭头函数不绑定自己的this

要继续使用箭头函数,解决方法是使用来自.each() 的第二个参数,即对象/数组的值。

示例(需要参数,因为arguments 变量也未绑定):

$('.topic-link').each( (∅, value) => {
  console.log($(value).parent());
});

【讨论】:

    【解决方案2】:

    箭头函数没有自己的this,所以你所拥有的等同于

    $('.topic-link').each(function () {
      console.log($(this).parent());
    });
    

    在您的情况下,thiswindow(或 document 或其他任何取决于调用它的范围),它没有父 dom 节点

    【讨论】:

    • 不知道为什么投反对票,这是正确的。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… “箭头函数不会创建自己的this上下文,所以this具有封闭上下文的本义。”
    • :facepalm: 非常感谢!我完全忘记了箭头函数。
    • 显然你可以使用箭头函数语法;你只需要传入.each() 提供的参数
    • @j08691 当然...但这并没有使这里的任何内容不正确,也没有说这是您需要做的
    • 我没有说你不正确。我赞成你。我认为这个问题的最佳答案是将您的答案和 Tibrogargan 的答案结合起来
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多