从数组中删除'variable'元素

时间:2017-09-28 12:39:21

标签: jquery arrays

我有一个有心愿单功能的网上商店。通过单击产品旁边的小按钮,它们将保存在会话中,并且可以在“愿望清单”页面上查看产品。

在愿望清单页面上,可以单击相同类型的按钮,从愿望清单中删除产品。但是,它不会删除特定产品,而是从列表/数组中删除前1/2产品。

以下是当前代码:

jQuery(document).ready(function() {
var x;
var y;

function setPosition() {
    x = jQuery('.navbar-right li.wishlist img').offset().left;
    y = jQuery('.navbar-right li.wishlist img').offset().top;
}

setPosition();

jQuery(window).resize(setPosition);

jQuery('img.add-to-wishist').click(function(event) {
    event.preventDefault();
    var wensenlijst = Cookies.get('wensenlijst');
    if (wensenlijst === null || wensenlijst === "" || wensenlijst === undefined || wensenlijst === "null" ) {
        var temp = [];
        wensenlijst = temp;
    }
    else {
        wensenlijst = JSON.parse(wensenlijst);
    }
    var id = jQuery(this).attr('attr-id');

    if( !jQuery(this).hasClass('done') ) {
        jQuery(this).addClass('done');
        var mysrc = jQuery(this).attr('src');
        var newsrc = mysrc.replace('likeitem.png', 'liked.png');
        jQuery(this).attr( 'src', newsrc);
        var clone = jQuery(this).clone().addClass('clonedHeart').insertAfter('img.add-to-wishist');
        var eOffset = jQuery(this).offset().top; //get the offset top of the element
        var eLeft = jQuery(this).offset().left;
        var eTop = eOffset - jQuery(window).scrollTop(); //position of the ele w.r.t window
            clone.css('z-index','10000')
                 .css('top', eTop)
                 .css('left', eLeft)
                 .css('position', 'fixed')
                 .animate({
                    left: x,
                    top: y,
                 }, 1500);
                 clone.queue(function() {
                    jQuery(this).remove();
                    var counter = jQuery('#wishlistcount');
                    var currentcount = wensenlijst.length;
                    counter.html( currentcount );
                    counter.addClass('itemAdded');
                    setTimeout(function(){
                      counter.removeClass('itemAdded');}, 2000);
                    jQuery(this).dequeue();
                 });
        wensenlijst.push(id);
    }
    else {
        jQuery(this).removeClass('done');
        var currentcount = jQuery('#wishlistcount').html();
        jQuery('#wishlistcount').html( parseInt(currentcount) - 1 );
        var mysrc = jQuery(this).attr('src');
        var newsrc = mysrc.replace('liked.png', 'likeitem.png');
        jQuery(this).attr( 'src', newsrc);
        var i = wensenlijst.indexOf(id);
        if (wensenlijst.length === 1) {
            wensenlijst = [];
        }
        else {
            wensenlijst = wensenlijst.splice(i);
        }
        if( jQuery('body').hasClass('page-template-template-wensenlijst') ){
            jQuery.when(Cookies.set('wensenlijst', wensenlijst, { expires: 7 })).done(function() {
                location.reload();
            });
        }
    }
    Cookies.set('wensenlijst', wensenlijst, { expires: 7 });
});});

我发现我拼接阵列的方式是错误的,但我无法弄清楚如何正确地做到这一点。我看到的大多数信息都与数组中需要删除的特定事物有关,而不是在变量的设置中。

这是一个按钮片段:

<div class="save"><a href="#"><img src="image/src" attr-id="4737" class="like-item add-to-wishist" alt="add to wishlist"></a><p>Bewaren</p></div>

1 个答案:

答案 0 :(得分:1)

您需要第二个参数到slice()函数调用并删除赋值。

而不是

wensenlijst = wensenlijst.splice(i);    

只写

 wensenlijst.splice(i, 1);