这个选择器在功能上

时间:2015-02-27 09:31:52

标签: javascript jquery function this selector

我想知道如何在函数中使用$(this)选择器。我尝试过在互联网上找到的多种方法,但似乎都没有。

以下是我尝试做的一个例子



function bobsCar() {
   $(this).toggle();
}

$('p').click(function() {
   bobsCar();
});




6 个答案:

答案 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;
&#13;
&#13;

您需要了解JavaScript上下文。默认情况下,如果在单击回调中调用方法,它将使用全局上下文(在这种情况下为window - 在破坏的函数中尝试控制台记录this),而不是回调中的那个。您可以使用callapply来指定上下文(在这种情况下,this引用回调中的DOMNode元素,因此我们将相同的上下文传递给函数并且它可以工作)。

这是一篇关于这个主题的好文章:http://yehudakatz.com/2011/08/11/understanding-JavaScript-function-invocation-and-this/

答案 2 :(得分:1)

click事件处理程序中this的值不是选择器的字符串表示形式。它是一个DOM节点。

如果您要覆盖某个功能的this的正常值,您可以使用callapply指定它。

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