1

レーティング システムの作業を開始したところ、jquery の知識に大きな穴が見つかりました。これまでの私のコードは次のとおりです。

<script>

$(document).ready(function() {
    $("#rate").delegate("div","click", function() {
        var targetid = $(this).attr("id");
        var voteval = $( '#' + targetid + ' span').html(); 
        if(isNaN(voteval)) { var voteval = 0; }
        voteval++;
        $( '#' + targetid + ' span').text(voteval);
    });

});
</script>

これにより、#rate グループ内の div の ID が正常に特定され、関連付けられたスパン内のデータが操作されます。

私の問題は、特定のクラスを含むグループ内で div を見つけられるようにしたいということです。簡単に言うと、ユーザーがクリックすると「.active」が検索され、存在する場合は削除され、「現在の」ターゲット (this) に .active が挿入されます。

4

3 に答える 3

0

私はあなたがそのようなものを望んでいると思います

$(document).ready(function () {

    $("#rate").on("click", "div", function () {
        //    get text of span and make it int, also init to 0 if it's not a number
        var thisTextToInt = parseInt($(this).children("span").text()) || -1;    
        //    increment the text and set it to the span
        $(this).children("span").text(thisTextToInt+1);    

        $('#rate .active').removeClass('active');    //    remove previous active
        $(this).addClass('active');                  //    make this active
    }); 

});

ただし、これは要素にテキストを設定する良い方法ではないと言わざるを得ません。データを別の場所に保持し、それらをビュー要素にバインドして、自動的に更新されるようにすることをお勧めします。

于 2013-06-30T19:55:18.423 に答える
0

div他のクラスからアクティブなクラスを削除し、このように現在のクラスに追加できます

$("#rate div").removeClass('active');
$(this).addClass('active');
于 2013-06-30T19:48:33.893 に答える
0

クリックイベントでこれを簡単に行うことができます:

$('.active').removeClass('active');
$(this).addClass('active');

アクティブなクラスが存在する場合は、それを削除します。

複数の がある場合は#rate、次のように最も近いものを見つける必要があります (id ではなくクラスにする必要があります)。

var $parent = $(this).closest('#rate');
$parent.find('.active').removeClass('active');
$(this).addClass('active');
于 2013-06-30T19:46:20.163 に答える