0

次のコードがあります。

$.getJSON('data.json', function(data) {
  var items = [];

  $.each(data, function(key, val) {
    items.push('<option id="' + key + '">' + val + '</option>');
  });

  $('<select/>', {
    'class': 'my-new-list',
    html: items.join('')
  }).appendTo('body');
});

これは単純な JSON ファイルでは問題なく機能しますが、もう少し複雑なデータが得られます (これが私に与えられた方法です)。

{
   "Shares": [
   {
      "shareName": "Frontier",
      "shareID": "FML"
   },
   {
      "shareName": "Global Petroleum",
      "shareID": "GBP"
   },
   {
      "shareName": "Tower Petroleum",
      "shareID": "TRP"
   },
   {
      "shareName": "Aquarius Platinum",
      "shareID": "AQP"
   }
   ]
}

これは単にドロップダウン メニューに値を入力するだけですが、Shares 内のそれぞれの "ShareName" を読み取るように構文を変更するにはどうすればよいですか?

ありがとう!

回答ありがとうございます。私は 1 つしか選択できないため、最初の返信を選択しましたが、皆様のご意見に本当に感謝しています。

4

4 に答える 4

1

まず、data.Shares代わりに繰り返す必要があります。大文字に注意してくださいS; JavaScriptでは大文字と小文字が区別されます。

また、単にキーと値ではなく、属性shareNameと属性を参照する必要があります。shareID

  $.each(data.Shares, function(_, val) {
    items.push('<option id="' + val.shareID + '">' + val.shareName + '</option>');
  });

理解を深めるために、あなたが持っているのは、オブジェクトの配列であるdata属性()を持つオブジェクト()です。Sharesその配列の各オブジェクトには2つの属性があります。shareIDおよびshareName

于 2012-09-28T13:31:10.657 に答える
1

繰り返しますが、HTMLを連結するのではなく、要素を直接作成して、メタ文字が正しくエスケープされるようにすることをおdata.Shares勧めします。<option>

$select = $('<select/>', {
    'class': 'my-new-list',
});

$.each(data.Shares, function(index, val) {
    $('<option>', {
       id: val.shareID, val: val.shareID, text: val.shareName
    }).appendTo($select);
});

$select.appendTo('body');

共有IDも<option>値に入れているので、完全な共有名の代わりにその省略されたトークンをバックエンドで使用できることに注意してください。

于 2012-09-28T13:35:05.807 に答える
0

Shares解析後、これはjavascriptオブジェクトであるため、配列を反復処理する代わりに、フィールドで指定された配列を反復処理します。

$.each(data.Shares, function(key, val) {
  items.push('<option id="' + val.shareID + '">' + val.shareName + '</option>');
});
于 2012-09-28T13:32:50.173 に答える
0
    $.each(data.Shares, function(val) {
         items.push('<option id="' + val.ShareId+ '">' + val.ShareName+ '</option>');
    });
于 2012-09-28T13:35:04.180 に答える