我想知道如何在函数中使用$(this)选择器。我尝试过在互联网上找到的多种方法,但似乎都没有。
以下是我尝试做的一个例子
function bobsCar() {
$(this).toggle();
}
$('p').click(function() {
bobsCar();
});

答案 0 :(得分:1)
另一种选择是使用自定义上下文执行该函数,如。
function bobsCar() {
$(this).toggle();
}
$('p').click(function() {
bobsCar.call(this);
});
在您的情况下,由于您在没有上下文的情况下调用bobsCar
,因此this
内部会引用window
对象,这就是它无效的原因。
答案 1 :(得分:1)
function bobsCar() {
$(this).toggle();
}
jQuery('p').click(function() {
bobsCar.call(this);
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>click me</p>
&#13;
您需要了解JavaScript上下文。默认情况下,如果在单击回调中调用方法,它将使用全局上下文(在这种情况下为window
- 在破坏的函数中尝试控制台记录this
),而不是回调中的那个。您可以使用call
或apply
来指定上下文(在这种情况下,this
引用回调中的DOMNode元素,因此我们将相同的上下文传递给函数并且它可以工作)。
这是一篇关于这个主题的好文章:http://yehudakatz.com/2011/08/11/understanding-JavaScript-function-invocation-and-this/
答案 2 :(得分:1)
click事件处理程序中this
的值不是选择器的字符串表示形式。它是一个DOM节点。
如果您要覆盖某个功能的this
的正常值,您可以使用call
或apply
指定它。
bobsCar.call(this);
您可以将其作为参数传递。
bobsCar(this);
function bobsCar(domNode) {
$(domNode).toggle();
}
你应该首先使用该函数作为事件处理程序。
$('p').click(bobsCar);
答案 3 :(得分:0)
您无法在被调用的函数中直接使用this
。您必须将所选对象作为函数参数传递。
function bobsCar(element) {
$(element).toggle();
}
$('p').click(function() {
bobsCar(this);
});
答案 4 :(得分:0)
这个函数内部不再引用'p'标记,你可以传递它
function bobsCar(el) {
el.toggle();
}
$('p').click(function() {
bobsCar($(this));
});
答案 5 :(得分:-1)
在JavaScript中,$(this)是一个上下文指针。它为您提供放置在堆栈中的最顶层上下文。
function bobsCar(elm){console.log(elm);
$(榆树).parent()toggleClass(); }$(&#39; p&#39;)。click(function(){var $ this = $(this); bobsCar($ this);});
jsfiddle.net/q325d6zw