【问题标题】:What does the keyword this refer to in this context?在这种情况下,关键字 this 指的是什么?
【发布时间】:2017-06-27 18:37:33
【问题描述】:

我正在为一个项目使用 jQuery 和语义 UI,但我对第二个 this 所指的内容感到困惑。这第二个指的是什么?顺便说一句,我是 jQuery 的新手。我希望第二个 this 引用 #sideBar a 但每次我尝试添加类时它都不起作用,

我想删除所有类,然后将项目添加到所有类,然后获取锚标记的文本内容,并将该锚标记的属性设置为一个以 textContent 作为其名称的类。

$('#sideBar a').on('click', function(){
    $('#sideBar a').removeClass().addClass("item");
    var addC = ($(this).text());
    $(this).addClass(addC);
});

谁能告诉我怎么做,顺便说一下,我对javascript中的apply调用和绑定有一些了解

【问题讨论】:

  • 它将引用第一个 this 所引用的完全相同的东西,即被点击的 #sidebar a 元素。

标签: javascript jquery html this semantic-ui


【解决方案1】:

this 内部和具有非箭头函数的事件侦听器将成为您的事件目标:

$('#sideBar a').on('click', function (event) {
    // next line removes all classes from all anchor elements that are children of #sideBar then adds the class item to each of them
    $('#sideBar a').removeClass().addClass("item");
    // sets addC to whatever the event target's text is
    var addC = ($(this).text());
    // adds the text stored in addC as a class to the event target
    $(this).addClass(addC);

    console.log(this === event.target); // logs true

});

编辑:我刚刚意识到我没有回答你的问题:

$(this).parents('#sideBar').first().addClass(addC); 而不是 $(this).addClass(addC); 应该可以解决问题。

【讨论】:

  • 此代码有效,谢谢。但是你能向我解释一下我的原始非工作代码和你的代码之间的区别,以及为什么你的代码有效而我的代码没有?
  • 您想将该类添加到#sideBar 元素。在事件处理程序中,event.target#sideBar 的子级,因此我们使用.parents('#sideBar') 回到树上并获取第一个,然后将类添加到其中。
猜你喜欢
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 2019-01-22
  • 1970-01-01
  • 2015-09-28
  • 2016-07-06
  • 1970-01-01
相关资源
最近更新 更多