0

PHP を使用してデータベースから動的に取り込まれる 2 つのドロップダウン リストがあります。これらには、指定された列のすべての値が含まれます。たとえば、1 つには parameterType のすべての値が含まれ、もう 1 つは dateTimeTaken のすべての値が含まれます。

データがフィルタリングされ、これらのオプションの一部が適用できなくなった場合に、これらのオプションのいずれかを無効にする方法はありますか?達成される?

アップデート:

私のデータは次の形式です:

 [{"dateTimeTaken":"2013-01-01 14:05:14",
   "reading":"0.90000",
   "parameterType":"Flouride",
   "inspectionPoint_id":"2"}....

次のコードを使用してこれを実行しようとしましたが、何もしていませんか??

 d3.json("HistoricData.php", function(error,data) 
 {
 var filtered_data = data.filter(function(d) { return d.inspectionPoint_id == i;})  
     filtered_data.forEach(function(d) {
     d.dateTimeTaken = parseDate(d.dateTimeTaken);
     d.reading = +d.reading;
     d.parameterType = d.parameterType;
     d.inspectionPoint_id = +d.inspectionPoint_id;      
 });

 var check = d3.select("selectparameter")//select dropdown list

 check.selectAll("option").each(checkOption);//select all options

 //for any of the options that don't match the parameterType's 
 //from the filtered dataset set display to none     
 var checkOption = function (d, e) {
 if(e !== d.values(d.parameterType)){
    return d3.select(this).attr("display", "none");
}
 };

更新 2

 d3.select("#selectparameter")
    .append("select")
    .selectAll("option")
    .data(filtered_data)
    .enter().append("option")
    .text(function(d) { return d.parameterType; })

ここに画像の説明を入力

4

1 に答える 1

1

オプションを更新するには、通常のデータ バインディング/更新パターン (このチュートリアルなどを参照) を使用できます。

最初の呼び出し (データをバインドしているとき) は次のようになります。

check.selectAll("option").data(data)
     .enter().append("option")
     ...

更新するには、次の行に沿って何かを使用します

var newOptions = check.selectAll("option").data(filtered_data);
newOptions.enter().append("option")
          ...
newOptions.exit().attr("display", "none");
newOptions.attr("display", "block");

デフォルトでは、d3 はそれぞれの配列のインデックスによってデータを照合することに注意してください。オプションの 2 番目の引数を使用して関数を指定できます。

check.selectAll("option").data(filtered_data, function(d) { return d.inspectionPoint_id; });
于 2013-03-17T16:21:31.667 に答える