jQuery addClass()返回意外结果

时间:2011-12-04 09:11:25

标签: javascript jquery debugging api

这里真的很困惑。我只是想在一个悬停的目标上做addClass('test') ...我的jQuery看起来像这样:

//#nav-main dropdown effects                
$('#nav-main ul li').hover(function () {
     $('#nav-main ul li').addClass('test');
   $(this).find('.dropdown').stop(true,true).slideToggle('slow');
   $('#nav-main ul li').removeClass("test");
});

然而,返回的是HTML:

<li id="menu-events">

到此:

<li id="menu-events" class="">

任何想法为什么?

3 个答案:

答案 0 :(得分:4)

您在同一个函数中添加和删除该类。 jQuery不会删除class属性,即使是空的。看来你错过了悬停的其他回调函数 - 你是否想要在推出时删除该类?你似乎想要更像这样的东西:

//#nav-main dropdown effects                
$('#nav-main ul li').hover(function () { // onRollOver
     $('#nav-main ul li').addClass('test');
     $(this).find('.dropdown').stop(true,true).slideDown('slow');
}, function() { // onRollOut
     $('#nav-main ul li').removeClass("test");
     $(this).find('.dropdown').stop(true,true).slideUp('slow');
});

答案 1 :(得分:1)

在Landons代码的基础上,您可以使用this进一步简化它,并避免一遍又一遍地运行相同的选择器:

//#nav-main dropdown effects                
$('#nav-main ul li').hover(function () { // onRollOver
     $(this).addClass('test').find('.dropdown').stop(true,true).slideDown('slow');
}, function() { // onRollOut
     $(this).removeClass("test").find('.dropdown').stop(true,true).slideUp('slow');
});

答案 2 :(得分:0)

你正在添加一个类并删除该类..你期望发生什么?你期望jquery删除空类属性??

您可以运行以下命令删除所有空类属性:

$('*[class=""]').removeAttr('class');