Javascript:如果不是CSV,则将值添加到CSV中 - 如果已经是CSV格式 - 从CSV中删除

时间:2011-04-16 23:56:36

标签: javascript

我正在构建一个CSV字符串 - 所以用户点击一个div的所有内容 - 一个包含5个字符的字符串被传递到一个隐藏字段 - 我要做的是附加每个新值并创建一个CSV字符串 - 完成后 - 显示在文本框中 - 如果传递给CSV的值已经存在 - 将其删除然后,就像之前一样,在文本字段中显示CSV。我有以下内容,但它不起作用......

function newQuery(val, id) {

    var xy = document.getElementById(id);
    var x = parent.document.getElementById('txtCriteria');
    var myValue = parent.document.getElementById('txtCriteria').value;
    var hdn = document.getElementById("hdnSearch");
    hdn.value += "," + val;

    var element = hdn.value;
    var fin;

    var leadingComma = element.substring(1, 0).toLowerCase();
    var trailingComma = element.substring(element.length - 1);


    // Check for leading comma
    if (leadingComma == ",") {
        fin = element.substring(1);
    }
    // Check for trailing comma
    if (element.charAt(element.length - 1) == ",") {
        fin = element.slice(0, -1);
    }

    if (x.value.search(val) == 0) {
        alert('Already exists');

        fin.replace(val, "");
        x.value = fin;

        // Set image to checked
        xy.src = 'bullet_plus.png';

    }
    else if (element.search(val) > 0) {
        alert('New Selection: ' + fin);

        x.value = fin;

        // Set image to checked
        xy.src = 'bullet_tick.png';

    }
}

2 个答案:

答案 0 :(得分:0)

处理CSV时,我建议您使用Array.joinString.split

var foo = "hello, there, so";
var arr = foo.split(","); // ["hello", " there", "so"];
var bar = arr.join(","); // "hello, there, so"

至于你的代码,没有HTML或没有有用的变量名称就没有意义。

答案 1 :(得分:0)

设置数据结构消除了许多不必要的工作:

function CsvSet(str) {
    var set = {};
    var arr = str.split(",");
    for (var i = 0; i < arr.length; i++)
        set[arr[i]] = true;
    this.set = set;
}

CsvSet.prototype.put = function(val) {
    this.set[val] = !this.set[val];
}

CsvSet.prototype.toString = function() {
    var res = [];
    for (var val in this.set) {
        if (this.set[val])
            res.push(val);
    }
    return res.join();
}

现在让我们添加和删除一些项目:

var set = new CsvSet("one,two,three");
set.put("one"); // remove
set.put("seven"); // add
set.toString();

输出:

"two,three,seven"