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