繁体   English   中英

逗号分隔的字符串

[英]Comma-Separated string

我有一个文本输入,每当用户选择一个新标签(一个新的创建一个新的列表元素)时,文本输入都会更新,这些列表元素被映射到一个逗号分隔的列表中,然后添加到文本输入的值中。

文字输入的值可能看起来像这样,

PHP,C#,C,C ++

用户可以单击标签将其从文本输入中删除,但是我看不到将其从输入字段中的逗号分隔列表中删除。

对于标记删除方法,我的代码如下所示。

var array = $("#job_tags_input").val().split(",");

我虽然这会在输入中提供值的数组,但我在控制台中得到的所有内容都在console.log(array)中,

[“ C”,“ PHP”,“ Perl”,“ C#”,“”]

如果删除了“ C”标签,如何将其从输入字段中删除?

我的JS

if($("#job_tags").get(0)) {
    $("#job_tags").tagHandler({
        assignedTags: [ 'C', 'Perl', 'PHP' ],
        availableTags: [ 'C', 'C++', 'C#', 'Java', 'Perl', 'PHP', 'Python' ],
        autocomplete: true,
        onAdd: function(tag) { 
            var s = $("#job_tags li").map(function(){
                return $(this).text();
            }).get().join(",");
            s = s.substring(0, s.length - 1);
            console.log(s);
            $('#job_tags_input').val(s);
        },
        onDelete: function(tag) { 
            /*$("#job_tags_input").val( $("#job_tags li").map(function(){
                return $(this).text();
            }).get().join(", "));*/
            var array = $("#job_tags_input").val().split(",");
            array = $.grep(array, function(value, i) {
                return ( value.indexOf(tag) == 0 );
            });
            array = array.join(",");
            console.log(array);
            $('#job_tags_input').val(array);
        }

    });
}

您可以先拼接项目:

array.splice(array.indexOf("C"), 1); // remove one item at the position of "C"

然后将元素结合在一起并更新文本框:

$("#job_tags_input").val(array.join()); // uses "," by default

但是,最好不要分割", "因为空格是定界符的一部分。

如果您使用的是jQuery,则有几种方法会有所帮助。 您可以在没有空格的情况下split()并使用$ .trim()清除空格,因为空格可能会或可能不会一直存在。

$ .grep()可用于过滤数组并返回新数组。

尝试下面的代码检查indexOf删除的标签,然后从列表中将其splice起来。 然后通过加入拼接列表来设置输入的值。

演示

var curSelection = $('#job_tags_input').val().split(",");
var elIndex = curSelection.indexOf(t);

if (elIndex >= 0) {
    curSelection.splice(elIndex , 1);
    $('#job_tags_input').val(curSelection.join());
}

$('#job_tags_input').val(curSelection.join());

下面的函数用于Array.indexOf,

//Below code is from http://stackoverflow.com/a/144172/297641
if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function (obj, fromIndex) {
    if (fromIndex == null) {
        fromIndex = 0;
    } else if (fromIndex < 0) {
        fromIndex = Math.max(0, this.length + fromIndex);
    }
    for (var i = fromIndex, j = this.length; i < j; i++) {
        if (this[i] === obj)
            return i;
    }
    return -1;
  };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM