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

时间:2012-08-24 14:12:57

标签: jquery

在我正在处理的页面中,jquery的addClass()removeClass()只能偶尔使用。

退房: http://retype.se/temp/scrolltest/test.html

第162-171行:

if(direction === 'down'){
     console.log('downer');
 console.log(affected);
 $(affected).removeClass('attached');
 $(affected).removeClass('parked-top');
 $(affected).addClass('parked-bottom');
}

它将downer和实际元素写入日志,但不会更改类。

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

编辑:将其保存到jsfiddle, http://jsfiddle.net/at9dZ/2/

正如您所看到的,如果您取消注释这些行上方的提醒,它将提醒......

1 个答案:

答案 0 :(得分:4)

检查你如何缓存选择器:

var affected = $(this).parent('.product').children('.price');

所以你直接使用对象affected而不是再次使用jQuery选择器。

if (direction === 'down'){
    console.log('downer');
    console.log(affected);
    affected.removeClass('attached');
    affected.removeClass('parked-top');
    affected.addClass('parked-bottom');
}

另外,你可以通过以下方式来实现这一点(只是糖,真的):

affected.removeClass('attached parked-top').addClass('parked-bottom')

如果代码使用断点而不是其他时间,则意味着在执行代码时jQuery可能无法“找到”元素,因此可能未加载DOM。将代码包装在:

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

或..

$(document).ready(function(){ 
// Code Here
});

确保它正确执行。