Javascript jQuery:Can';我们不能将jQuery(this)分配给一个变量吗?
我只是在练习jQuery。如果这是个奇怪的问题,请原谅 问题:我们可以将Javascript jQuery:Can';我们不能将jQuery(this)分配给一个变量吗?,javascript,jquery,Javascript,Jquery,我只是在练习jQuery。如果这是个奇怪的问题,请原谅 问题:我们可以将jQuery(this)分配给变量吗 说明: 我可以将各种jQuery选择器分配给变量,然后可以使用这些变量调用不同的jQuery函数 比如说 $filterSwitch = jQuery('.filter-switch'); $filterSwitch.click(function(e) { alert("Filter Button Clicked"); // This works with
jQuery(this)
分配给变量吗
说明:
我可以将各种jQuery选择器分配给变量,然后可以使用这些变量调用不同的jQuery函数
比如说
$filterSwitch = jQuery('.filter-switch');
$filterSwitch.click(function(e) {
alert("Filter Button Clicked"); // This works without any problem
});
$filterSwitch = jQuery('.filter-switch');
$current = jQuery(this);
$filterSwitch.click(function(e) {
$current.toggleClass("filter-on"); // This does not work
jQuery(this).toggleClass("filter-on"); // This works
});
另一方面,在将其分配给变量之后,我似乎无法使用jQuery(this)
比如说
$filterSwitch = jQuery('.filter-switch');
$filterSwitch.click(function(e) {
alert("Filter Button Clicked"); // This works without any problem
});
$filterSwitch = jQuery('.filter-switch');
$current = jQuery(this);
$filterSwitch.click(function(e) {
$current.toggleClass("filter-on"); // This does not work
jQuery(this).toggleClass("filter-on"); // This works
});
这是不允许的,或者是否有任何特定的方法将
jQuery(this)
分配给变量 此
是一个DOM元素,jQuery将回调函数的范围设置为回调的主题元素
此处this
将是此处单击的元素,只能使用处理程序回调中的this
关键字进行访问
$filterSwitch = jQuery('.filter-switch');
$current = jQuery(this);
$filterSwitch.click(function(e) {
$current.toggleClass("filter-on"); // This does not work because when $current was assigned, `this` did not refer to the correct element.
$newCurrent = jQuery(this); // Now `this` is the clicked element.
$newCurrent.toggleClass("filter-on"); // This works
});
这是因为您需要记住,
此
指的是您当前所在的上下文
所以第一个
$current = jQuery(this);
可能是指身体或其他东西,而不是第二个this
第二个此
在click方法的上下文中,该上下文设置为。过滤器开关
希望这有意义:)
您可以这样做:
$filterSwitch = jQuery('.filter-switch');
$filterSwitch.click(function(e) {
$filterSwitch.toggleClass("filter-on"); // This works for all elements with that class
jQuery(this).toggleClass("filter-on"); // This works only for the one you're clicking atm
});
请注意,第一行现在指的是所有具有filter switch类的元素,而第二行仅指您目前正在处理的元素。您是否希望
$current
包含单击的元素?应该有帮助将$(this)分配给单击处理程序之外的变量this
,该处理程序不引用单击的元素。它指的是全局上下文。您可以说:$filterSwitch=jQuery('.filterSwitch')
将jQuery元素放入变量中。然后你说$current=jQuery(这个)代码>。但是这还不是什么。您必须说$current=$filterSwitch代码>。但由于这只是传递另一个变量中的值,所以您可以说$filterSwitch.click(函数(e){$filterSwitch.toggleClass(“filter on”);})代码>Yeahhhhh。这是最好的解释。现在我明白了问题所在。谢谢,先生:-)