1

以前にクリックした要素を選択するのに助けが必要です。(答えが見つかりませんでした)私の機能は次のとおりです。

showSticker:function(){
    $(".Sticker").click(    
        function () {
            if ($(this).hasClass("StickerShow"))
                $(this).removeClass('StickerShow')
            else {
                $(".Sticker").removeClass('StickerShow'); // Here is a problem
                $(this).addClass('StickerShow');
            }
        }
    );
}

実際にはうまく機能しますが、一致するすべての要素からクラスを削除するのはかなりダミーであり、CPUがそれをレンダリングするのはかなり難しいことに気づきました。

4

2 に答える 2

0

いくつかのものをキャッシュして、不必要にDOMをトラバースしないようにすることができます。

var $stickers = $('.Sticker');

// ...

showSticker: function() {
    $stickers.click(function() {
        var $this = $(this);

        if ($this.hasClass("StickerShow")) {
            $this.removeClass('StickerShow')
        } else {
            $stickers.removeClass('StickerShow'); // Here is a problem
            $this.addClass('StickerShow');
        }
    });
}
于 2012-11-03T08:41:15.117 に答える
0

あなたはこのようにしたいようです:

showSticker:function(){
    var Stickers=$(".Sticker");
    var lastSticker=Stickers.first();
    Stickers.click(    
        function () {
            $this=$(this);
            if ($this.hasClass("StickerShow"))
                $this.removeClass('StickerShow')
            else {
            // Not worry about removeClass from element which has no such class
                lastSticker.removeClass('StickerShow');
                $this.addClass('StickerShow');
                lastSticker=$this;
            }

        }
    );
}

ステッカーが兄弟の場合は、代わりにシンプル $this.siblings('.StickerShow').removeClass('StickerShow')$this.toggleClass('StickerShow')使用できますif/else

于 2012-11-03T08:47:33.540 に答える