jquery“hasClass()”无法正常工作?

时间:2012-10-26 19:58:39

标签: javascript jquery

如果另一个div有一个类,我需要隐藏一个div。

我创建了一个非常基本的示例HERE

当点击“点击”这个词时,我需要隐藏底部的div来点击。它为中间div添加了一个类很好,但似乎hasClass()不想工作?

注意:结构需要像这样。如果单击“单击”,修改中间div(添加类?),并根据中间div操作底部div。有了这个设置 - 我不能只做“如果点击CLICK,slideUp()底部div”。

此外,一旦单击“确定”或“取消”,它将恢复,因为中间的div将不再具有该类。如果这是我可以在这里工作的方法,哈哈。

6 个答案:

答案 0 :(得分:3)

你的if语句不在任何函数之外,因此在加载脚本后没有理由调用它。

See this fiddle,我认为这就是你想要的。

答案 1 :(得分:3)

在旁注中,检查是否有课程的另一种变体是:

if ( $('body.className').length ) {

仍然建议使用hasClass。很高兴看到变化。

答案 2 :(得分:2)

正如其他人所说,您没有在所有点击事件处理程序上调用if。使用if内的语句创建自定义函数,并在所有单击处理程序上调用它。

选中此fiddle

答案 3 :(得分:1)

将类附加到DOM元素后,应正确隐藏元素。

$('.element').click(function()
{
    $('.thisElement').addClass('hidepub');
    if($('.thisElement').hasClass('hidepub')) {
         $('.thisElement').hide();
    }
});

答案 4 :(得分:1)

仅在脚本加载时调用一次。您需要确保在.click(...)处理程序中调用它。

if($('#timestampdiv').hasClass('hidepub')) {
    $('#major-publishing-actions').slideUp('slow');
}

答案 5 :(得分:0)

您可以将它们全部合并到一个函数中 - 并且您希望该检查位于单击函数

您可以使用toggleClass并传入条件

来减少addclass removeclass
$('a.edit-timestamp,a.save-timestamp,a.cancel-timestamp').click(function() {
    var $tsdiv = $("#timestampdiv");
    // add class showpub if edit is clicked
    $tsdiv.toggleClass('showpub',$(this).hasClass('edit-timestamp'));
    // add class hidepub only if it wasn't edit that was clicked
    $tsdiv.toggleClass('hidepub',!$(this).hasClass('edit-timestamp'));  

    // then do your toggle                            
    if ($tsdiv.hasClass('hidepub')) {
        $('#major-publishing-actions').slideUp('slow');
    }else{
        $('#major-publishing-actions').slideDown('slow');
    }
});

http://jsfiddle.net/JPcge/

您可以通过交换传递给toggleClass()方法的逻辑来反转它