在这个JS代码中如何使用“this”

时间:2014-04-16 17:13:52

标签: javascript jquery

我现在已经阅读了很多,但从低音的角度来看,我仍然没有得到一个有意义的解释。

$(document).ready(function() {
 $("#slideshow").css("overflow", "hidden"); /*kuna JS t66tab siis ei ole vaja scrollbari n2ha*/
 $("#slideshow-nav").css("visibility", "visible"); /*nupud tehakse n2htavaks*/
 $("#slideshow-nav a[href=#pilt1]").addClass("active"); /*muudetakse esimene nupp aktiivseks*/

 $("#slideshow-nav").localScroll({ /*see funktsionaalsus pärineb ka http://flesler.blogspot.com/*/
  target:'#slideshow', axis: 'x'   /*vajalik scrollTo ja localscroll kasutamiseks, paneb paika,et need pluginad liigutaksid slaidi pilte mööda x-telge*/
 });

 $("#slideshow-nav a").click(function(){
  $("#slideshow-nav a").removeClass("active");
  $(this).addClass("active"); /*kui vajutada uuele nupule v6etakse aktiivne klass sealt 2ra ja lisatakse vajutatud nupule*/
  });

});    

$(this)在上下文中有什么用途:$(this).addClass("active");,我理解代码本身的作用,但$(this)的目的是什么,$(this)在那里使用,是否有一种简单的方法可以达到同样的效果? 谢谢!

4 个答案:

答案 0 :(得分:0)

请参阅jQuery $(this) vs this

$("#slideshow-nav a").click(function(){
  $("#slideshow-nav a").removeClass("active");
  $(this).addClass("active");
});

当您调用传递给$("#slideshow-nav a").click()的处理函数时,this is bound to the element会触发该事件。然后,将this传递给$()以围绕该元素构造一个jQuery对象,这样就可以在其上使用jQuery' addClass()。您可以通过用this.classList.add("active")替换该行来完成相同的操作,以使用非jQuery方式执行相同的操作。

简而言之,当$(this)绑定到某个元素并且您想在该元素上使用jQuery方法时,使用this

所以,这段代码最终的作用是:

  1. 删除课程"有效"来自与选择器#slideshow-nav a匹配的所有元素。
  2. 添加课程"有效"到接收事件的元素(被点击的元素)。
  3. 以这种方式,以前任何活跃的"元素被"取消激活",被点击的元素被激活"。

答案 1 :(得分:0)

$(this)指的是被点击的jQuery元素。使用$(this)是确保您引用用户与之交互的元素的可靠方法。很遗憾,没有好方法可以确保您在不使用$(this)

的情况下引用您与之互动的元素

答案 2 :(得分:0)

首先让我们从this的含义开始。在JavaScript中,可以绑定任何函数,以便this在调用函数时引用函数内部的任意事物(对象,数字,字符串等)(请参阅Function.bind)。通常,不保证this将在任意函数内部引用;你必须阅读文档/源代码或自己测试。

当您调用click()时,jQuery会将回调函数中的this绑定到匹配集中的目标元素。当你说$(this)(或jQuery(this))时,你只是用jQuery“wrapper”包装元素。

至于替代方案,jQuery会将事件对象传递给您的回调,您可以通过以下方式访问目标:

$("#slideshow-nav a").click(function(evt){
    console.log($(evt.target)); //I think just using "$(this)" is easier!
});

答案 3 :(得分:0)

根据minitech的评论,$(this)指的是其中一个' a' slideshow-nav DOM元素中的元素,特别是单击的元素。

$("#slideshow-nav a").click(function(){
  // $("#slideshow-nav a") refers to an array of links in slideshow-nav
  $("#slideshow-nav a").removeClass("active");
  // $(this) refers just to the specific link that was clicked
  $(this).addClass("active"); 
  });

这是AFAIK的最佳实践。是否有某些原因您不想使用$(this)