我需要幫助創建具有完全相同的格式dynamicallly創建DOM對象,這是在接收JSON創建動態元素的JSON。保存動態創建的DOM,並創建一個JSON
請檢查JS小提琴鏈接,下面的源代碼。 現在,如果您看到,我在表格中通過JSON獲取數據。 表中的複選框值是JSON對象。 當我選擇任何複選框,然後點擊保存,生成並顯示相應的股利。
現在,我想要使用「保存顯示的數據和創建json」按鈕來保存這個動態創建的DOM結構,並且還要創建具有相同格式的JSON(包含所有屬性(不管事實,他們是否被顯示或沒有相應的父母。對於例如,電話號碼,圖像的所有數據應該在JSON是可用,即使它不顯示,但可在原來的JSON)。
<!doctype html>
<html>
<head>
<style>
table, th, td {
border: 1px solid #ddd;
border-collapse: collapse;
padding: 10px;
}
table {
margin: auto;
}
.parent {
height: 25%;
width: 90%;
padding: 1%;
margin-left: 1%;
margin-top: 1%;
border: 1px solid black;
}
.parent:nth-child(odd){
background: skyblue;
}
.parent:nth-child(even){
background: green;
}
</style>
<body>
<button onclick="createTable()">Load Table</button>
<button onclick="saveData()">Save Table data</button>
<table id="datatable" align="center">
<tr><th>Select</th><th>Name</th><th>DOB</th></tr>
</table>
<br />
<button onclick="createJson()">Save displayed data & create JSON</button>
<br />
<div class="container">
<
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script>
function createTable() {
$.getJSON("https://api.randomuser.me/?results=5", function(data) {
// First, clear the table
$('#datatable tr:has(td)').remove();
data.results.forEach(function (record) {
var json = JSON.stringify(record);
$('#datatable').append(
$('<tr>').append(
$('<td>').append(
$('<input>').attr('type', 'checkbox')
.addClass('selectRow')
.val(json)
),
$('<td>').append(
$('<a>').attr('href', record.picture.thumbnail)
.addClass('imgurl')
.attr('target', '_blank')
.text(record.name.first)
),
$('<td>').append(record.dob)
)
);
})
}).fail(function(error) {
console.log("**********AJAX ERROR: " + error);
});
}
function saveData(){
// Scrape the URLs that were already collected into a Set:
var used = new Set($('.myLink').map(function() {
return $(this).attr('href');
}).get());
var errors = [];
$('input.selectRow:checked').each(function(count) {
// Get the JSON that is stored as value for the checkbox
var obj = JSON.parse($(this).val());
// See if this URL was already collected (that's easy with Set)
if (used.has(obj.weburl)) {
errors.push(obj.title);
} else {
// Append it to the collection (use jQuery for appending)
$('.container').append(
$('<div>').addClass('parent').append(
$('<label>').addClass('dataLabel').text('Name: '),
obj.name.first + ' ' + obj.name.last,
$('<br>'), // line-break between name & pic
$('<img>').attr('src', obj.picture.thumbnail), $('<br>'),
$('<label>').addClass('dataLabel').text('Date of birth: '),
obj.dob, $('<br>'),
$('<label>').addClass('dataLabel').text('Address: '), $('<br>'),
obj.location.street, $('<br>'),
obj.location.city + ' ' + obj.location.postcode, $('<br>'),
obj.location.state, $('<br>')
)
);
}
// Clear checkbox:
$('input', this).prop('checked', false)
});
if (errors.length)
alert('The following were already selected:\n' + errors.join('\n'))
}
</script>
</body>
</head>
</html>
示例JSON
{
"results": [
{
"gender": "male",
"name": {
"title": "mr",
"first": "romain",
"last": "hoogmoed"
},
"location": {
"street": "1861 jan pieterszoon coenstraat",
"city": "maasdriel",
"state": "zeeland",
"postcode": 69217
},
"email": "[email protected]",
"login": {
"username": "lazyduck408",
"password": "jokers",
"salt": "UGtRFz4N",
"md5": "6d83a8c084731ee73eb5f9398b923183",
"sha1": "cb21097d8c430f2716538e365447910d90476f6e",
"sha256": "5a9b09c86195b8d8b01ee219d7d9794e2abb6641a2351850c49c309f1fc204a0"
},
"dob": "1983-07-14 07:29:45",
"registered": "2010-09-24 02:10:42",
"phone": "(656)-976-4980",
"cell": "(065)-247-9303",
"id": {
"name": "BSN",
"value": "04242023"
},
"picture": {
"large": "https://randomuser.me/api/portraits/men/83.jpg",
"medium": "https://randomuser.me/api/portraits/med/men/83.jpg",
"thumbnail": "https://randomuser.me/api/portraits/thumb/men/83.jpg"
},
"nat": "NL"
}
],
"info": {
"seed": "2da87e9305069f1d",
"results": 1,
"page": 1,
"version": "1.1"
}
}
更好地分享您的JSON而不是API調用數據 –
我已經用示例JSON更新了這個問題。 – Sunny
聽起來好像你需要一個用戶選擇模型和一個源數據模型。然後,您只需執行該選擇的投影,用源數據替換項目。你不需要在DOM中這樣做,你不應該這樣做。 –