javascript从数组中删除值,数组问题

时间:2013-02-16 23:39:36

标签: javascript jquery

我正在尝试使用字符串填充数组,要添加的元素是单击的< \ li>的HTML,我可能正确地填充它。

我的问题是,当用户再次点击选中的链接时,我想从数组

中删除此项目

以下是代码示例:

$(document).ready(function(){
    var chosen = [];
    var chosenCounter = 0;

            find("ul").find("li").click(function(){
        var checkBox = $(this).find("img").first();
        var checkBoxSrc = checkBox.attr("src");
        if(checkBoxSrc == "images/unchecked.png"){
            checkBoxSrc = "images/checked.png";
            checkBox.attr("src",checkBoxSrc);
            checkBox = "";
            checkBoxSrc = "";
            var temp = this.outerHTML;
            chosen[chosenCounter] = temp;
            chosenCounter ++;
        }
        if(checkBoxSrc == "images/checked.png"){
            checkBoxSrc = "images/unchecked.png";
            checkBox.attr("src",checkBoxSrc);
            checkBox = "";
            checkBoxSrc = "";



    for (var j =0; j<=chosen.length; j++){
            var tempRemove = this.outerHTML;
            chosen.splice( chosen.indexOf( tempRemove ), 1 );
            tempRemove = '';
        }
    }
});

});

我一直在尝试在互联网上找到的所有功能和方法..但结果并不好用,我会非常感谢校正和解释。 提前全部谢谢。

1 个答案:

答案 0 :(得分:0)

我已经通过重写代码来更好地工作。有很多问题,但这是我测试的固定版本。

  • 您的原始代码包含 if 语句,然后是 if 语句。你需要一个if,然后是 else if
  • 注意找到子元素时我只使用$('img',this)而不是find运算符和first()。
  • 使用ID代替HTML
  • 对于调试,那里有一个console.log语句。删除它,以便它在IE中工作。
  • 要向阵列添加元素,请使用推送
  • 无需循环拼接即可删除该项目。只需拨打一次。

    $(document).ready(function(){

    var chosenIDs = [];
    
    $("ul li").click(function () {
        var checkBox = $('img', this);
        var checkBoxSrc = checkBox.attr("src");
        var id = $(this).attr('data-id');
        console.log(id + ' ' + chosenIDs.length + ' ' + checkBoxSrc);
    
        if (checkBoxSrc == "images/unchecked.png") {
            checkBoxSrc = "images/checked.png";
            checkBox.attr("src", checkBoxSrc);
    
            chosenIDs.push(id);
        }
        else if (checkBoxSrc == "images/checked.png") {
            checkBoxSrc = "images/unchecked.png";
            checkBox.attr("src", checkBoxSrc);
    
            chosenIDs.splice(chosenIDs.indexOf(id), 1);
        }
    });
    

    });