2011-04-16 17 views
1

私はCSV文字列を作成していますので、ユーザーがdivをクリックするとすべて - 5文字の文字列が非表示フィールドに渡されます。私は新しい値を追加して、CSV文字列を作成します - 完了したら - テキストボックスに表示する - CSVに渡された値がすでに存在する場合 - それを削除してから、前と同じようにCSVをテキストフィールドに表示します。私は以下の持っているが、それだけでは動作しません...Javascript: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'; 

    } 
} 

答えて

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せずにほとんど意味がないあなたのコードについてはや有用な変数名を持たずに。

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" 
+0

私がいることを見つけますストレージの混乱の仕方。文字列キーの存在を、セットに含まれているかどうかのtrue/falseに設定します。配列からプッシュ/スライスする方が意味があります。 – Raynos

+0

@Raynos - 毎回リスト全体をトラバースする必要があることに留意してください。明確な項目の集合は、集合の定義とほぼ同じです。 –

+0

私はあなたのポイントを見ます。 – Raynos

関連する問題