javascript - 从类属性值字符串解析 json
问题描述
我有一个选择下拉列表来填充 json 数据多年。json 数据存储在 div 类中,我有var url = JSON.parse(document.getElementById("fitmentData").getAttribute("class"));
从 div 类获取 json 的变量。在控制台中,url 实际上确实抓取了 json 数据,但信息没有填充到选择下拉列表中。
html
<div id="fitmentData" class='[
{ "brand" : "Honda" , "model" : "SL350" , "year" : "1969" },
{ "brand" : "Honda" , "model" : "SL175" , "year" : "1970" },
{ "brand" : "Honda" , "model" : "SL350" , "year" : "1970" },
{ "brand" : "Honda" , "model" : "SL175" , "year" : "1971" },
{ "brand" : "Honda" , "model" : "SL350" , "year" : "1971" },
{ "brand" : "Honda" , "model" : "SL175" , "year" : "1972" },
{ "brand" : "Honda" , "model" : "SL350" , "year" : "1972" },
{ "brand" : "Honda" , "model" : "XL250" , "year" : "1972" },
{ "brand" : "Honda" , "model" : "XL175" , "year" : "1973" },
{ "brand" : "Honda" , "model" : "SL350" , "year" : "1973" }]'
<select name="year" id="year"></select>
<select id="make" name="make"></select>
<select id="model" name="model"></select>
// my js functions
</div>
js
<script>
window.onload = function () {
//year
let yearDropdown = $('#year');
yearDropdown.append('<option selected="true" disabled>Choose Year</option>')
.on('change', function () { })
}
var url = JSON.parse(document.getElementById("fitmentData").getAttribute("class"));
//append json years in dropdown
$.getJSON(url, function (data) {
$.each(data, function (key, entry) {
yearDropdown.append($('<option>. </option>')
.attr('value', entry.year).text(entry.year));
})
//remove year duplicates
var map = {}
$('select option').each(function () {
if (map[this.value]) {
$(this).remove()
}
map[this.value] = true;
})
}
</script>
选择下拉列表名称填充并显示选择年份,但下拉列表中未填充任何数据。
解决方案
需要进行以下更改:
- div 标签未关闭 - 缺失
>
- 将全年人口代码保留在 window.onload 内,否则,您必须在 window.onload 函数外声明 yearDropdown
- 当您执行 JSON.parse() 时,您已经解析了数据,您无需使用它调用 API 来再次获取数据。
修改了附加年份选项的代码。
var data = JSON.parse(document.getElementById("fitmentData").getAttribute("class"));
$.each(data, function (key, entry) { yearDropdown.append($('<option>', { value: entry.year, text: entry.year })); });
是的,请不要使用 class 属性来存储数据,而是使用 data-*(例如 data-year)属性或从后端 API 获取它。
推荐阅读
- node.js - TypeError:bodyParser.urlecoded 不是函数
- gitlab - Gitlab CI 和大型 npm 依赖项
- c# - C# 可为空和 FirstOrDefault 失败
- r - 具有混合样条的图形或合并具有不同样条的图层
- node.js - 节点js中的Image_Encryption
- firebase - 如何在 nodejs 10 中使用 async/await?
- html - 关于 html img src
- database - 图表 JS 结果显示两次
- jenkins-pipeline - Salesforce 快速部署问题
- mysql - 在mysql中转置/旋转行