jQuery:无法删除类

时间:2013-10-11 21:20:54

标签: javascript jquery html css

我做了一个像这样工作的喜欢/不喜欢的脚本:带有rate_deal类的2个按钮。单击like或dislike按钮时,它会从两个按钮中删除rate_deal类,以防止再次单击,然后添加一些类以使其更好看。

我有问题。我不知道我做错了什么,但是当我点击按钮时,我无法删除两个按钮的rate_deal类。

以下是代码:

HTML:

<div class="content_r_d_left_rate" id="deal-1">
<span class="rate_deal content_r_d_l_rate_img_up"></span>
<span class="rate_deal content_r_d_l_rate_img_down"></span>
</div>

jQuery的:

$(".rate_deal").click(function(){

        var dealIdRaw = $(this).parent().attr('id');
        var dealId = dealIdRaw.replace('deal-', '');

        $('#'+dealIdRaw).children().removeClass('rate_deal');

        if($(this).hasClass('content_r_d_l_rate_img_up'))
        {
            $('#'+dealIdRaw+' > .content_r_d_l_rate_img_down').addClass('content_r_d_l_rate_img_down_i');
            $('#'+dealIdRaw+' > .content_r_d_l_rate_img_down').removeClass('content_r_d_l_rate_img_down');
        }
        else
        {
            $('#'+dealIdRaw+' > .content_r_d_l_rate_img_up').addClass('content_r_d_l_rate_img_up_i');
            $('#'+dealIdRaw+' > .content_r_d_l_rate_img_up').removeClass('content_r_d_l_rate_img_up');
        }
    });

2 个答案:

答案 0 :(得分:5)

您编写代码的方式存在结构性问题。当你这样做时:

$(".rate_deal").click(function(){

从现在开始,锁定点击处理程序的DOM对象,无论它们是否继续附加rate_deal类。因此,在结构上,删除类时不会删除单击处理程序。

您可以使用如下的委托事件处理来解决该问题:

$(".content_r_d_left_rate").on("click", ".rate_deal", function(){

这将只在".rate_deal"类位于单击的对象上时触发单击处理程序。

这个区块:

    var dealIdRaw = $(this).parent().attr('id');
    var dealId = dealIdRaw.replace('deal-', '');

    $('#'+dealIdRaw).children().removeClass('rate_deal');

也可以替换为以下任何一个选项:

    $(this).siblings().add(this).removeClass("rate_deal");

    $(this).parent().find(".rate_deal").removeClass("rate_deal");

    $(this).closest(".content_r_d_left_rate").find(".rate_deal").removeClass("rate_deal");

    $(this).parent.children().removeClass("rate_deal");

我更喜欢第三种变体,因为如果你稍微修改HTML,它最容易破坏。

整个简化代码块将是:

$(".content_r_d_left_rate").on("click", ".rate_deal", function(){

    // get our common parent
    var parent = $(this).closest(".content_r_d_left_rate");

    // remove existing .rate_deal classes in this block    
    // so no more clicks get processed
    parent.find(".rate_deal").removeClass("rate_deal");

    // toggle classes based on what was clicked
    if($(this).hasClass("content_r_d_l_rate_img_up")) {
        parent.find(".content_r_d_l_rate_img_down")
            .addClass("content_r_d_l_rate_img_down_i")
            .removeClass("content_r_d_l_rate_img_down");
    } else {
        parent.find(".content_r_d_l_rate_img_up")
            .addClass("content_r_d_l_rate_img_up_i")
            .removeClass("content_r_d_l_rate_img_up");
    }
});

答案 1 :(得分:-1)

由于您只是想在点击时删除该类以防止进一步操作,您可以执行此操作 -

$('.rate_deal').bind('click',function(){

    $(this).parent().children().removeClass('rate_deal'); //this will remove 'rate_deal' class from both of them.

    //here you can put your change image for up/down thumb logic.

})