2

これは私の最後の質問に関連しています(注:私はすでにいくつかの良い答えを得ています)。フィルタリングするプログラムを実行しています。行からデータを取得する方法を知っている限り、テキストを追加する方が簡単だと思ったので、この質問は含めませんでした。しかし、残念なことに、今まで良いプログラムをコーディングすることができませんでした。

私は現在このjavascriptコードを使用しています(Aweaに感謝します):

$('#out').click(function(){    
   $('table tr').each(function(){
      var td = '';
      $(this).find('option:selected').each(function(){
         td = td + ' ' + $(this).text();
      });
      td = td + ' ' + $(this).find('input').val();
      alert(td);
   });
})

私の質問は:行のデータの前にテキストを追加する方法は?たとえば、このコードは、のようdata1.1 data1.2 data1.3に最初の行にアラートを出します。

次に、のような2番目のdata2.1 data2.2 data2.3

出力をこのように表示したい

[ {"name":"data1.1","comparison":"data1.2", "value":"data1.3"}, {"name":"data2.1","comparison":"data2.2", "value":"data2.3"}, {"name":"data3.1","comparison":"data3.2", "value":"data3.3"} {.....and so on......}]

しかし、その前に、行の最初のセルがすべて空でないかどうかを確認したいと思います。空の場合は、その行をスキップして次の行に進みます。

誰かが私を助けてくれますか...

4

3 に答える 3

5

以前の質問に対する私の回答 に基づいて、 http://jsfiddle.net/evbUa/1/を参照してください。

データを JavaScript オブジェクト (dataArray私の例) に格納したら、私の例に従って JSON を自分で記述できますが、JSON-jsなどのライブラリを使用する方がはるかに簡単であることがわかります(こちらも参照)。

// object to hold your data
function dataRow(value1,value2,value3) {
    this.name = value1;
    this.comparison = value2;
    this.value = value3;
}

$('#out').click(function(){   

    // create array to hold your data
    var dataArray = new Array();

    // iterate through rows of table
    for(var i = 1; i <= $("table tr").length; i++){

        // check if first field is used
        if($("table tr:nth-child(" + i + ") select[class='field']").val().length > 0) {

            // create object and push to array
            dataArray.push(    
                new dataRow(
                    $("table tr:nth-child(" + i + ") select[class='field']").val(),
                    $("table tr:nth-child(" + i + ") select[class='comp']").val(),
                    $("table tr:nth-child(" + i + ") input").val())
            );
        }

    }

    // consider using a JSON library to do this for you
    for(var i = 0; i < dataArray.length; i++){
        var output = "";
        output = output + '{"name":"data' + (i + 1) + '.' + dataArray[i].name + '",';
        output = output + '"comparison":"data' + (i + 1) + '.' + dataArray[i].comparison + '",';
        output = output + '"value":"data' + (i + 1) + '.' + dataArray[i].value + '"}';
        alert(output);
    }
})
于 2011-05-05T08:53:48.587 に答える
2

var a = []; a[0] = "data1.1 data1.2 data1.3" a[1] = "data1.6 data1.2 data1.3" var jsonobj = {}; var c = [] for (var i = 0;i

アラート(c); // ["{"name":"data1.1","comp...1.2","value":"data1.3"}", "{"name":"data1.6", "comp...1.2","値":"data1.3"}"]

https://github.com/douglascrockford/JSON-js/blob/master/json2.jsの JSON.stringify の関数のライブラリを含める必要があり ます

お役に立てれば

于 2011-05-05T07:01:14.530 に答える
2

ここで行う必要があることは 2 つあります。最初にデータをオブジェクトの配列に取得し、次に文字列表現を取得します。

私はこれをテストしていませんが、何をすべきかについての基本的なアイデアを提供するはずです。

編集私が作成したこの JS-Fiddle の例を見てください。 http://jsfiddle.net/4Nr9m/52/

$(document).ready(function() {
    var objects = new Array();
    $('table tr').each(function(key, value) {
        if($(this).find('td:first').not(':empty')) {
        //loop over the cells
        obj = {};
        $(this).find('td').each(function(key, value) {
                var label = $(this).parents('table').find('th')[key].innerHTML;
                obj[label] = value.innerHTML;

        });
        objects.push(obj);

        }
    });
    //get JSON.
    var json = objects.toSource();
    $('#result').append(json);
});
于 2011-05-05T04:45:26.517 に答える