2016-05-09 1 views
1

これは、あなたがそれが愚かな見つけることができるように単純なことかもしれないが、私は困惑。私は、2列のHTMLテーブルからデータを抽出し、2つの1次元配列を吐き出す必要のあるjQueryコードを試しています。例えば。バーのタグについては[サンプル1]、[サンプル2]、[サンプル3 '...]、例えばChartistのチャートのバー値については[645,872,423 ...]jQueryオブジェクト

EDIT:後で、同じチャートでより多くのデータセットを表示できるように、「シリーズ」配列が2次元でなければならないことを発見しました。 1つの "シリーズ"データセットのみを使用する場合は、ブラケットを囲んで配列内の配列に変換します。

私はこのようなjQueryオブジェクトにHTMLのテーブル値を得ることができた

<table id="myTable"> 
<tbody><tr> 
<th>Oxide</th> 
<th>Proportion</th> 
</tr> 
<tr> 
<td>Ca0</td> 
<td>0.73</td> 
</tr> 
<tr> 
<td>Li2O</td> 
<td>0</td> 
</tr> 
<tr> 
<td>MgO</td> 
<td>0.13</td> 
</tr> 
</tbody></table> 

問題がある:MYTABLEは、HTMLテーブルのようなものです

var tdata = []; 
var headers = []; 
$('#myTable th').each(function(index, item) { 
headers[index] = $(item).html(); 
}); 
$('#myTable tr').has('td').each(function() { 
var tdataItem = {}; 
$('td', $(this)).each(function(index, item) { 
    tdataItem[headers[index]] = $(item).html(); 
}); 
tdata.push(tdataItem); 
}); 

...

:私は基本的にこれを必要とチャーティストに供給するための独自の一次元配列に(「酸化物」の下の)最初の列及び(「割合」の下)は、第2の列の値を取得することができません

私は私がエキスに管理していないため、何らかの形でこれらのオブジェクトは多次元であるか起こっていくつかのjQuery funkinessがありますようですあなたがconsole.log(tdata);

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object] 
0: 
Object 
Oxide: 
"Ca0" 
Proportion: 
"0.73" 
__proto__: 
Object 

を通じてアレイの出力を見ることができJSfiddleを作りましたChartistのための1次元の「ラベル」と「シリーズ」の配列それは、しかし、死んで簡単にする必要がありますか?

+0

これは常に2つの列になるのですか?これは動的であることをお探しですか? – WonderGrub

+0

各テーブルには常に2つの列があります。さまざまなデータセットを同じチャートに重ねる必要があるので、後で複雑になるかもしれませんが、これまでChartistではこれまでの問題にぶち当たっていませんでした。一連の1次元配列を渡すだけです: 'series:[2、 5、3、8]、[9,1,4,5]、...またはむしろ 'series:valueArray1、valueArray2、...' –

+0

私の答えはあなたの問題を解決しましたか? – WonderGrub

答えて

0

データが逆順である可能性があります。 2つの配列を持つオブジェクトに対して、オブジェクトの配列を格納しています。

私はあなたがチャーティストのために使用する「データ」オブジェクトを作成する例とフィドルを更新します。

https://jsfiddle.net/t539uuok/1/

var data = { 
    labels: [], 
    series: [] 
}; 
$("#myTable tr").has("td").each(function() { 
    data.labels.push($(this).find("td:first").html()); 
    data.series.push($(this).find("td:last").html()); 
}); 

あなたはそれを動的にする必要がある場合は、他の変更があることが必要となります。しかし、これは、1次元のラベル/シリーズデータをキャプチャするだけの場合に有効です。

+0

ありがとう、非常にエレガントで効率的です。今私は別の問題に遭遇しました:Chartistは "シリーズ"配列の文字列を飲み込まず、その配列に空の場所がある場合はエラーをスローします(常に存在します)。 私はparseFloatを次のように追加しました: 'data.series.push(parseFloat($(this).find(" td:last ")。html()));' どのように空の場所の問題を解決するには? –

+0

私はまた、時には3つの列があるかもしれないことに気付きました。 –

+0

はい、parseFloatは確かに行く方法です。私が行う唯一の変更は、条件付きでNaNの代わりに0を得ることです。たとえば、var val = parseFloat($(this).find( "td:last")。html()); data.series.push(isNaN(val)?0:val); – WonderGrub

関連する問題