Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;这";没有按预期工作_Javascript_Jquery_This - Fatal编程技术网

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">

我已经为此挣扎了一个小时,但我无法解决它。我不太熟悉在javascript上使用
这个
,但这非常简单,而且不起作用

这是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>
因此,它应该从具有class
navlink
的所有元素中删除class
active
,然后将class
active
添加到单击的元素中。但事实并非如此

将其更改为:

$(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:the
addClass()
方法只有在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");