JavaScript在单击时从列表中删除字符串(如果已经存在)

JavaScript在单击时从列表中删除字符串(如果已经存在),javascript,jquery,Javascript,Jquery,我在单击时从列表中添加和删除项目时遇到问题。移除功能只工作一次 HTML 我还觉得这个功能可以简化?编辑:重写它 var $showList = $('#show-list'); $('#my-list').find('li').click(function () { var $this = $(this); var itemName = $this.data('itemname'); var showListText = $showList.text(); v

我在单击时从列表中添加和删除项目时遇到问题。移除功能只工作一次

HTML

我还觉得这个功能可以简化?

编辑:重写它

var $showList = $('#show-list');
$('#my-list').find('li').click(function () {
    var $this = $(this);
    var itemName = $this.data('itemname');

    var showListText = $showList.text();
    var showListItems = showListText.split(',');
    var itemIndex = showListItems.indexOf(itemName);

    if (itemIndex > -1) {
        // remove item
        showListItems.splice(itemIndex, 1);
    } else {
        // append item
        showListItems.push(itemName);
    }

    showListText = showListItems.filter(function (a) { return !!a; }).join(',');
    $showList.text(showListText);
});

编辑3:
仅从最佳实践的角度来看,我在jQuery对象前面加了
$
前缀,而没有其他前缀。我觉得它使代码更具可读性,并允许您为变量指定一个“类型”,以便您始终知道它是什么。

这就是您需要的吗?我会先跳过转换到数组。另外,代码中的$itemname是什么

<html>
    <head>
        <script>
            function removeItemFromList(listName, itemName) {
                var selectobject=document.getElementById(listName);
                for (var i=0; i<selectobject.length; i++){
                    if (selectobject.options[i].value == itemName) {
                        selectobject.remove(i);
                    }
                }
            }

            function addItemToList(listName, itemName, itemValue) {
                var selectobject=document.getElementById(listName);
                var found = false;
                for (var i=0; i<selectobject.length; i++){
                    if (selectobject.options[i].value == itemValue) {
                        found = true;
                        // already in list, don't re-add
                        break;
                    }
                }

                if (!found) {
                    var option = document.createElement("option");
                    option.text = itemName;
                    option.value = itemValue;
                    selectobject.add(option);
                }
            }
        </script>
    </head>
    <body>
        <select id="show-list">
          <option value="volvo">Volvo</option>
          <option value="saab">Saab</option>
          <option value="mercedes">Mercedes</option>
          <option value="audi">Audi</option>
        </select>
        <br/>
        <input type="button" value="remove volvo" onclick="removeItemFromList('show-list', 'volvo');"  />
        <input type="button" value="remove saab" onclick="removeItemFromList('show-list', 'saab');"  />
        <input type="button" value="add delorean" onclick="addItemToList('show-list', 'DeLorean', 'delorean');"  />
    </body>
</html>

函数removeItemFromList(listName,itemName){
var selectobject=document.getElementById(listName);

对于(var i=0;iYou必须为每个项目列表设置Id。$(“项目Id”).remove;请给出一个完整的示例,使问题重复出现-您的示例不存在,例如,
$itemname
应该是什么或它来自何处,完全不清楚。请阅读。根据请求,我添加了其他信息。感谢您的查找!如果您删除最后一个项目不起作用,因为您搜索了
itemtoremove+“,”
和最后一个元素(我想)没有逗号。为什么要删除字符串而不是删除(切片)
数组
?谢谢。慢慢来。几乎所有这一切都是对所选项目的可视化显示。太好了!谢谢你的帮助!非常感谢!@没问题,请查看。你一定会学到一些技巧,一路读下去,如果你每天都遵循这些技巧,你最终会写出b更好的代码。太好了!再次感谢!我已经更新了原始帖子。项目名称来自此
  • C1
  • 
    
    var $showList = $('#show-list');
    $('#my-list').find('li').click(function () {
        var $this = $(this);
        var itemName = $this.data('itemname');
    
        var showListText = $showList.text();
        var showListItems = showListText.split(',');
        var itemIndex = showListItems.indexOf(itemName);
    
        if (itemIndex > -1) {
            // remove item
            showListItems.splice(itemIndex, 1);
        } else {
            // append item
            showListItems.push(itemName);
        }
    
        showListText = showListItems.filter(function (a) { return !!a; }).join(',');
        $showList.text(showListText);
    });
    
    <html>
        <head>
            <script>
                function removeItemFromList(listName, itemName) {
                    var selectobject=document.getElementById(listName);
                    for (var i=0; i<selectobject.length; i++){
                        if (selectobject.options[i].value == itemName) {
                            selectobject.remove(i);
                        }
                    }
                }
    
                function addItemToList(listName, itemName, itemValue) {
                    var selectobject=document.getElementById(listName);
                    var found = false;
                    for (var i=0; i<selectobject.length; i++){
                        if (selectobject.options[i].value == itemValue) {
                            found = true;
                            // already in list, don't re-add
                            break;
                        }
                    }
    
                    if (!found) {
                        var option = document.createElement("option");
                        option.text = itemName;
                        option.value = itemValue;
                        selectobject.add(option);
                    }
                }
            </script>
        </head>
        <body>
            <select id="show-list">
              <option value="volvo">Volvo</option>
              <option value="saab">Saab</option>
              <option value="mercedes">Mercedes</option>
              <option value="audi">Audi</option>
            </select>
            <br/>
            <input type="button" value="remove volvo" onclick="removeItemFromList('show-list', 'volvo');"  />
            <input type="button" value="remove saab" onclick="removeItemFromList('show-list', 'saab');"  />
            <input type="button" value="add delorean" onclick="addItemToList('show-list', 'DeLorean', 'delorean');"  />
        </body>
    </html>