我试图将相同的选项添加到列出的每个下拉框中,但这些选项仅被添加到第一个下拉列表中。
function loadIgorMap() {
$.getJSON('./iGorMap.json', function (data) {
theData = data;
for (var i = 0; i < data.length; i++) {
$('.tableBody').append(`<tr>
<td>${data[i].FiduciaryOutsourcingField}</td>
<td>
<select class="browser-default custom-select" id="dropdown">
<option value="NA" class="N/A" hidden> -- Select --</option>
</select>
</td>`)
}
})
}
window.onload = function () {
for (let j = 0; j < theData.length; j++) {
console.log('I am here')
console.log(theData)
let option;
for (let i = 0; i < jsonKeys.length; i++) {
option = document.createElement('option');
option.text = jsonKeys[i];
// console.log(jsonKeys[i])
// option.value = jsonKeys[i].abbreviation;
dropdown.add(option);
}
}
};
这将为页面上的所有选择框显示相同的选项。 这是指向repl.it https://repl.it/@MattEubanks/Vanilla-Mapping-Tool上的实时页面的链接。我添加了一个CSV文件,您应该可以将其保存在excel文件中,然后加载到系统中。
答案 0 :(得分:1)
我花了一点时间来了解您要做什么。看来您打算导入CSV文件并阅读标题行。然后,您希望能够在应用程序中映射列标题。
请考虑以下代码。我填充了变量,假设所有数据已经从CSV和JSON中导入/
$(function() {
// Field Data read in from CSV
var fields = ["First Name", "Middle Name", "Last Name", "Suffix", "Address 1", "Address 2", "City", "State", "Zip Code", , , , , , , , , , , , ];
// JSON Data for selections
var myData = [{
"FiduciaryOutsourcingField": "EIN",
"YourField": ""
},
{
"FiduciaryOutsourcingField": "Location",
"YourField": ""
},
{
"FiduciaryOutsourcingField": "TaxId",
"YourField": ""
},
{
"FiduciaryOutsourcingField": "FirstName",
"YourField": "First Name"
},
{
"FiduciaryOutsourcingField": "MiddleName",
"YourField": "Middle Name"
},
{
"FiduciaryOutsourcingField": "LastName",
"YourField": "Last Name"
}
];
function readData(dObj, tObj) {
$.each(dObj, function(key, row) {
var newRow = $("<tr>").appendTo(tObj);
var f1 = $("<td>").html(row.FiduciaryOutsourcingField).appendTo(newRow);
var f2 = $("<td>").appendTo(newRow);
var s1 = $("<select>").appendTo(f2);
$("<option>").html("-- Select --").appendTo(s1);
$.each(fields, function(i, v) {
$("<option>", {
selected: (row.YourField == v ? true : false),
"data-col-it": i
}).html((v != undefined ? v : "(Col-" + i + ")")).appendTo(s1);
});
});
}
readData(myData, $(".tableBody"));
});
.tableHeader {
width: 300px;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container col-md-">
<div>
<table class="table table-bordered table-striped">
<thead class="thead-dark">
<tr>
<th scope="col">Fiduciary Outsourcing Field</th>
<th scope="col">Your Fields</th>
</tr>
</thead>
<tbody class="tableBody"></tbody>
</table>
</div>
</div>
如您所见,我遍历了JSON数据的每一行,并从中制作了Table Row。由于我们需要每个Select的字段,因此每次遍历都要遍历字段数据,从而创建新的<option>
元素。如果JSON数据中已经存在匹配项,我们还可以设置每个属性的selected
属性。
我提供了一个data-col-id
,以防您需要使用索引和列名进行映射。
希望这会有所帮助。