为什么jquery';s addClass和removeClass函数在这种情况下不起作用?

为什么jquery';s addClass和removeClass函数在这种情况下不起作用?,jquery,Jquery,在我正在处理的页面中,jquery的addClass()和removeClass()只能偶尔工作 退房: 第162-171行,例如: if(direction === 'down'){ console.log('downer'); console.log(affected); $(affected).removeClass('attached'); $(affected).removeClass('parked-top'); $(affected).addClass('par

在我正在处理的页面中,jquery的
addClass()
removeClass()
只能偶尔工作

退房:

第162-171行,例如:

if(direction === 'down'){
     console.log('downer');
 console.log(affected);
 $(affected).removeClass('attached');
 $(affected).removeClass('parked-top');
 $(affected).addClass('parked-bottom');
}
它将downer和实际元素写入日志,但不更改类

它不会抛出错误或任何东西,只是忽略它

编辑:将其保存到JSFIDLE,


如您所见,如果取消注释这些行上方的警报,它将发出警报…

检查您如何缓存选择器:

var affected = $(this).parent('.product').children('.price');
因此,您可以直接使用受影响的对象
,而不是再次使用jQuery选择器

if (direction === 'down'){
    console.log('downer');
    console.log(affected);
    affected.removeClass('attached');
    affected.removeClass('parked-top');
    affected.addClass('parked-bottom');
}
此外,您可以通过以下操作(真的,只需糖):

如果代码使用断点,但在其他时间不使用断点,这意味着执行代码时可能没有加载DOM,jQuery无法“找到”元素。将代码包装为:

$(function() {
    // Code here
});
或者


确保它正确执行。

检查如何缓存选择器:

var affected = $(this).parent('.product').children('.price');
因此,您可以直接使用受影响的对象
,而不是再次使用jQuery选择器

if (direction === 'down'){
    console.log('downer');
    console.log(affected);
    affected.removeClass('attached');
    affected.removeClass('parked-top');
    affected.addClass('parked-bottom');
}
此外,您可以通过以下操作(真的,只需糖):

如果代码使用断点,但在其他时间不使用断点,这意味着执行代码时可能没有加载DOM,jQuery无法“找到”元素。将代码包装为:

$(function() {
    // Code here
});
或者



确保它正确执行。

哪里定义了
受影响的
?这将更容易在JSFIDD中调试,确认
方向
等于
“向下”
,并且
受影响的
包含代码中该点的预期元素。是的,方向向下且受影响的包含正确的元素。相信我。。。我可以在这些行的两侧运行警报和日志,并获得预期的结果。您不需要使用
$(受影响)
因为受影响的
已经是一个jQuery对象,其中定义了
受影响的
?这将更容易在JSFIDLE中调试,确认
方向
等于
'down'
,并且
受影响的
包含代码中该点的预期元素。是,方向向下并受影响,包含正确的元素。相信我。。。我可以在这些行的两侧运行警报和日志,并获得预期的结果。您不需要使用
$(受影响的)
,因为
受影响的
已经是jQuery objectNice捕获。这就是为什么我觉得在包含jQuery选择器的变量前面加上
$
,即
$impacted
前缀很方便。jonas,我将断点设置为160,并在控制台中逐步执行代码-这些类按预期添加和删除。您可能想尝试同样的方法,看看是否还有另一个逻辑错误。谢谢,但是如果您在没有断点的情况下运行它,它会工作吗?对我来说不是。Nic,再次感谢,但document.ready()似乎也不是。它更新了fiddle。@jonas我认为你的顶级函数正在重写你的第二个函数。我不完全确定您想要完成什么,所以修复起来有点困难,但语法是正确的。您的
.product
.product.bottom
航路点处理程序出现逻辑问题,因为它们似乎同时被触发。捕捉得很好。这就是为什么我觉得在包含jQuery选择器的变量前面加上
$
,即
$impacted
前缀很方便。jonas,我将断点设置为160,并在控制台中逐步执行代码-这些类按预期添加和删除。您可能想尝试同样的方法,看看是否还有另一个逻辑错误。谢谢,但是如果您在没有断点的情况下运行它,它会工作吗?对我来说不是。Nic,再次感谢,但document.ready()似乎也不是。它更新了fiddle。@jonas我认为你的顶级函数正在重写你的第二个函数。我不完全确定您想要完成什么,所以修复起来有点困难,但语法是正确的。
.product
.product.bottom
航路点处理程序出现逻辑问题,因为它们似乎同时被触发。