Javascript 当未选择任何内容时,$(此)如何工作

Javascript 当未选择任何内容时,$(此)如何工作,javascript,jquery,Javascript,Jquery,我刚开始缓存jquery对象,但不确定在使用(这个)时如何正确地进行缓存 此外,我唯一知道如何使用(此)的时间是在单击对象或函数中,如: $(".trigger").click(function () { if ($(this).hasClass('toggle')) { $(this).closest("td").next().find(".clueless > div").slideUp(); $(this).removeClass('toggl

我刚开始缓存jquery对象,但不确定在使用(这个)时如何正确地进行缓存

此外,我唯一知道如何使用(此)的时间是在单击对象或函数中,如:

$(".trigger").click(function () {
    if ($(this).hasClass('toggle')) {
        $(this).closest("td").next().find(".clueless > div").slideUp();
        $(this).removeClass('toggle');
    } else {
        $(this).closest("td").next().find(".clueless > div").slideDown();
        $(this).addClass('toggle');
    }
});
因此,如果我想缓存
$(this).closest(“td”).next().find(“.clauless>div”)
我唯一能想到的是:

var $something = $(".trigger").find(this).closest("td").next().find(".clueless > div");

不确定您想要实现什么,但只要有上下文,您就可以缓存
$(this)

$(".trigger").click(function () {
    var $trigger = $(this);
    if ($trigger.hasClass('toggle')) {
        $trigger.closest("td").next().find(".clueless > div").slideUp();
        $trigger.removeClass('toggle');
    } else {
        $trigger.closest("td").next().find(".clueless > div").slideDown();
        $trigger.addClass('toggle');
    }
});

不确定您想要实现什么,但只要有上下文,您就可以缓存
$(this)

$(".trigger").click(function () {
    var $trigger = $(this);
    if ($trigger.hasClass('toggle')) {
        $trigger.closest("td").next().find(".clueless > div").slideUp();
        $trigger.removeClass('toggle');
    } else {
        $trigger.closest("td").next().find(".clueless > div").slideDown();
        $trigger.addClass('toggle');
    }
});

如果要缓存
$(this).closest(“td”).next().find(“.cluness>div”)
,则

$(".trigger").click(function () {
    var el = $(this).closest("td").next().find(".clueless > div");
    if ($(this).hasClass('toggle')) {
        el.slideUp();
        $(this).removeClass('toggle');
    } else {
        el.slideDown();
        $(this).addClass('toggle');
    }
});
我假设这就是您想要的,缓存
$(this)
是有意义的,因为您多次使用它

var $this = $(this);

如果你想缓存<代码>$(this).closest(“td”).next()。查找(“.clauless>div”),你会这么做

$(".trigger").click(function () {
    var el = $(this).closest("td").next().find(".clueless > div");
    if ($(this).hasClass('toggle')) {
        el.slideUp();
        $(this).removeClass('toggle');
    } else {
        el.slideDown();
        $(this).addClass('toggle');
    }
});
我假设这就是您想要的,缓存
$(this)
是有意义的,因为您多次使用它

var $this = $(this);

我不会完全重复
这个
关键字是如何工作的,但是有一个详尽的解释

在JS中,默认的
行为不改变
保持简单,要知道
this
关键字所指的对象,只需在函数调用中查看
的左侧即可

例如,在
myObj.someFunction()
中,
someFunction
中的
this
关键字将指向
myObj
(除非该函数已使用绑定)

如果未在对象上调用函数,例如
someFunction()
,则
将指向浏览器中的
窗口
中的全局对象

除了
addEventListener
之外,在传递的匿名函数中也是如此,这将确保处理程序中的
This
值是处理程序附加到的对象

例如

时,API会更改此
使用或
Function.prototype.apply
,可以指定在函数执行期间此
将指向的对象

一些库(例如jQuery)正在利用该功能使
指向更直观的对象,而不是全局对象

例如

当库以这种方式更改
时,除了查看库的文档,没有其他方法可以查看此将是什么

从中我们可以看出:

除了事件对象之外,事件处理函数还具有 通过 这个关键字

重写函数 现在,以下是如何重新编写函数:

$(".trigger").click(function () {
    var $this = $(this).toggleClass('toggle'),
        $elementToSlide = $this.closest("td").next().find(".clueless > div"),
        isToggled =  !$this.hasClass('toggle'),
        slideBehavior = isToggled? 'slideUp' : 'slideDown';

    $elementToSlide[slideBehavior]();
});

我不会完全重复
这个
关键字是如何工作的,但是有一个详尽的解释

在JS中,默认的
行为不改变
保持简单,要知道
this
关键字所指的对象,只需在函数调用中查看
的左侧即可

例如,在
myObj.someFunction()
中,
someFunction
中的
this
关键字将指向
myObj
(除非该函数已使用绑定)

如果未在对象上调用函数,例如
someFunction()
,则
将指向浏览器中的
窗口
中的全局对象

除了
addEventListener
之外,在传递的匿名函数中也是如此,这将确保处理程序中的
This
值是处理程序附加到的对象

例如

时,API会更改此
使用或
Function.prototype.apply
,可以指定在函数执行期间此
将指向的对象

一些库(例如jQuery)正在利用该功能使
指向更直观的对象,而不是全局对象

例如

当库以这种方式更改
时,除了查看库的文档,没有其他方法可以查看此将是什么

从中我们可以看出:

除了事件对象之外,事件处理函数还具有 通过 这个关键字

重写函数 现在,以下是如何重新编写函数:

$(".trigger").click(function () {
    var $this = $(this).toggleClass('toggle'),
        $elementToSlide = $this.closest("td").next().find(".clueless > div"),
        isToggled =  !$this.hasClass('toggle'),
        slideBehavior = isToggled? 'slideUp' : 'slideDown';

    $elementToSlide[slideBehavior]();
});

$(“.trigger”).find(this)should==this没有理由缓存整个
$(this.foo().bar().baz()…
东西,因为您只使用了一次。另外,您可以在
之后使用
.end()
。find()
(等)而不是在新行上调用
。removeClass()
。为什么不像
var el=$那样缓存它呢.closest(“td”).next().find(“.clauless>div”)
,但正如有人提到的,如果只使用一次,则不需要缓存它。将只触发if或else中的一条语句。如果你想保存几个字符,我想你可以缓存它。将
$(this)
缓存在您的单击中更有意义handler@Juhana事实上有很好的理由这样做。保持干燥并提高可读性。$(“.trigger”).find(this)应该==this没有理由缓存整个
$(this.foo().bar().baz()…
东西,因为您只使用了一次。此外,您可以在
.find()
之后使用
.end()
而不是调用
.removeClass()
在新行上。为什么不像
var el=$(this).closest(“td”).next().f那样缓存它呢