【问题标题】:Bind select dropdown for each table column (Head) from JSON, while binding JSON data to HTML table Jquery从 JSON 中为每个表列(头)绑定选择下拉列表,同时将 JSON 数据绑定到 HTML 表 Jquery
【发布时间】:2016-01-12 17:30:40
【问题描述】:

我有一个由 JSON 数据填充的动态表。我想为每一列选择一个下拉列表。列数不固定。它们由 JSON 填充。所以我想要每列顶部的选择下拉列表。这个下拉列表也应该由 JSON 填充。

HTML:

<table id="jsonTable" class="table table-hovere">
</table>

jquery:

function addAllColumnHeaders(myList) {
         var columnSet = [];
         var headerTr$ = $('<tr/>');

         for (var i = 0; i < myList.length; i++) {
         var rowHash = myList[i];
         for (var key in rowHash) {
            if ($.inArray(key, columnSet) == -1) {
                columnSet.push(key);
                headerTr$.append($('<th/>').html(key));
            }
         }
         }
         $("#jsonTable").append(headerTr$);

         return columnSet;
         }

         $.getJSON("data.json", function (data) {
         var columns = addAllColumnHeaders(data);

         for (var i = 0; i < data.length; i++) {
         var row$ = $('<tr/>');
         for (var colIndex = 0; colIndex < columns.length; colIndex++) {
            var cellValue = data[i][columns[colIndex]];

            if (cellValue == null) { cellValue = ""; }

            row$.append($('<td/>').html(cellValue));
         }
         $("#jsonTable").append(row$);
         }
         });

JSON:

[
  {
    "Model": "Iphone 18",
    "Name": "iOS",
    "Share": 57.56,
    "Price Range": "$800 - $1000",
    "Brand": "Apple"
  },
  {
    "Model": "Nexus 23",
    "Name": "Android",
    "Share": 24.66,
    "Price Range": "$600 - $800",
    "Brand": "Samsung"
  },
  {
    "Model": "Tom-tom",
    "Name": "Java ME",
    "Share": 10.72,
    "Price Range": "$200 - $900",
    "Brand": "X Brand"
  }
]

目前,这是我的桌子:

我希望表格是这样的:

请帮忙。提前致谢。

【问题讨论】:

  • 你现在可以检查我的另一个编辑吗?

标签: javascript jquery html json


【解决方案1】:

你可以这样做-

https://jsfiddle.net/9eemmbjc/1/

你的 json

var jsonResult=[
  {
    "Model": "Iphone 18",
    "Name": "iOS",
    "Share": 57.56,
    "Price Range": "$800 - $1000",
    "Brand": "Apple"
  },
  {
    "Model": "Nexus 23",
    "Name": "Android",
    "Share": 24.66,
    "Price Range": "$600 - $800",
    "Brand": "Samsung"
  },
  {
    "Model": "Tom-tom",
    "Name": "Java ME",
    "Share": 10.72,
    "Price Range": "$200 - $900",
    "Brand": "X Brand"
  }
]

jQuery

var rowArray = new Array();

$.each(jsonResult,function(index,item){
  row=$("<tr/>");
    row.prepend('<td><select><option>Some option</select></td>');
         $.each(item,function(inx,el){
         $(row).append('<td>'+el+'</td>');
    });
    rowArray.push(row);
})

$('table').html(rowArray);

更新

https://jsfiddle.net/9eemmbjc/2/

不是一个好方法,但应该从 jsonObject 做你想做的事情。

我已经更改了脚本中的一些内容,以便在标题之前的顶部显示选择框行。

var selectRow= {
        Model:$('<select/>'),
        Name:$('<select/>'),
        Share:$('<select/>'),
        PriceRange:$('<select/>'),
        Brand:$('<select/>')
};

//select boxes at the top
$.each(jsonResult,function(index,item){
    selectRow.Model.append('<option>'+item.Model+'</option>');
    selectRow.Name.append('<option>'+item.Name+'</option>');
    selectRow.Share.append('<option>'+item.Share+'</option>');
    selectRow.PriceRange.append('<option>'+item["Price Range"]+'</option>');
    selectRow.Brand.append('<option>'+item.Brand+'</option>');
});

var dropdownRow= '<tr><th>'+selectRow.Model[0].outerHTML+'</th><th>'+selectRow.Name[0].outerHTML+'</th><th>'+selectRow.Share[0].outerHTML+'</th><th>'+selectRow.PriceRange[0].outerHTML+'</th><th>'+selectRow.Brand[0].outerHTML+'</th></tr>'

【讨论】:

  • 嗨@Manoz,感谢您的回复。我已经编辑了我的问题,请您帮我解决一下。
猜你喜欢
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多