Javascript &引用;这";没有按预期工作
我已经为此挣扎了一个小时,但我无法解决它。我不太熟悉在javascript上使用Javascript &引用;这";没有按预期工作,javascript,jquery,this,Javascript,Jquery,This,我已经为此挣扎了一个小时,但我无法解决它。我不太熟悉在javascript上使用这个,但这非常简单,而且不起作用 这是HTML <ul class="nav pull-right nav-tabs" id="primarynav"> <li class=" navlink"> <a href="#">About</a> </li> <li class="navlink active">
这个
,但这非常简单,而且不起作用
这是HTML
<ul class="nav pull-right nav-tabs" id="primarynav">
<li class=" navlink">
<a href="#">About</a>
</li>
<li class="navlink active">
<a href="#">Portfolio</a>
</li>
<li class="navlink">
<a href="#">Contact</a>
</li>
</ul>
因此,它应该从具有classnavlink
的所有元素中删除classactive
,然后将classactive
添加到单击的元素中。但事实并非如此
将其更改为:
$(this).addClass("active");
.addClass()
是一个jQuery方法,您一直试图将其应用于非jQuery对象(此vs$(此)
)。此不是jQuery对象,请改用$(此)
。是一个jQuery方法,但此
只是对DOM对象的直接引用。在对其使用jQuery方法之前,您需要先将这个
包装到jQuery对象中
$(document).ready(function(){
$(".navlink").click(function(){
$(".navlink").removeClass("active");
$(this).addClass("active");
});
});
-使用$(this.addClass()
而不是this.addClass()
编辑
我想对此稍作阐述。决不能在JavaScript对象上调用jQuery的addClass()
方法,因为addClass()
是jQuery方法
要在纯JavaScript中执行同样的操作,如果您只想使用this
,您可以使用,类似于此:
$(document).ready(function(){
$(".navlink").click(function(){
$(".navlink").removeClass("active");
//$(this).addClass("active");
this.className += " active";
});
});
-使用this.className
示例
尽管如果您已经在使用jQuery,那么不使用$(this).addClass()
将毫无意义。您应该使用$(this)
此
引用jQuery已将事件附加到的DomeElement。要将其转换为jQuery集合并能够使用jQuery方法,如addClass
,请将其作为参数传递给$
:
$(this).addClass("active");
在函数内部,this
关键字实际上是指函数的上下文。在事件处理程序的情况下,上下文是处理程序附加到的domeElement。因此,要将它与this
一起使用,我应该执行var this=“$(this);
?this
是一个特殊的关键字,因此您不应该尝试重新分配它。相反,要存储jQuery集合,请使用类似var jQThis=$(this)的变量;
@Christian:我见过一个常用的约定,偶尔用来缓存jQuery对象,就是var$this=$(this)
例如,$
是一个匈牙利符号逻辑,表示此变量包含一个jQuery对象。尽管缓存对于此
没有意义,但如果您在当前范围内只使用一次它。这并没有解释为什么$(此)
在这个
不起作用的情况下工作。新的JavaScriptor在这里经常遇到麻烦,尤其是在jQuery上,因为$
使事情看起来神秘而神奇。因此,如果我用getElementById
来定位元素,我可以使用这个
?@Christian:theaddClass()
方法只有在jQuery对象上被调用时才会起作用,因为它是jQuery方法。@Christian:为了完整起见,我添加了一些关于如何使用this
和纯JavaScript的信息,但是如上所述,您已经在使用jQuery so$(this).addClass()
很好。在开发过程中保持浏览器的开发人员控制台打开,并读取它给您带来的错误。保持它打开的缺点是它将占用我屏幕高度的30%。@系统通常可以分离。
$(document).ready(function(){
$(".navlink").click(function(){
$(".navlink").removeClass("active");
$(this).addClass("active");
});
});
$(this).addClass("active");