#javascript #html #json
#javascript #HTML #json
Вопрос:
У меня есть данные в формате JSON для нескольких таблиц на моем веб-сайте. КАЖДАЯ ТАБЛИЦА ИМЕЕТ ОДИНАКОВОЕ КОЛИЧЕСТВО СТОЛБЦОВ (2 колонки).Я пытаюсь минимизировать функцию в javascript, которая отображает таблицу с текущими данными JSON. Должен ли я создавать каждую таблицу в html или одной должно быть достаточно и для функции? Как взять данные JSON и создать для них отдельную таблицу?
Вот код
https://codepen.io/S4UCY/pen/wvGgzmZ
var firstTable = [
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablabla',
}
]
var secondTable = [
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
}
]
/*
1. Loop Through Array amp; Access each value
2. Create Table Rows amp; append to table
*/
for (var i in firstTable){
var row = `<tr>
<td>${firstTable[i].code}</td>
<td>${firstTable[i].result}</td>
`
var table = $('#table-body')
table.append(row)
}
#title{
color:#fff;
font-weight:100;
font-size:28px;
padding:10px;
border:1px solid #fff;
background-color: #55608f;
}
html,
body {
height: 100%;
}
body {
margin: 0;
background: linear-gradient(45deg, #bada55, #5f2c82);
font-family: sans-serif;
font-weight: 100;
}
.container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
table {
width: 500px;
border-collapse: collapse;
overflow: hidden;
box-shadow: 0 0 20px rgba(0,0,0,0.1);
}
th,
td {
padding: 15px;
background-color: rgba(255,255,255,0.2);
color: #fff;
}
th {
text-align: left;
}
thead {
th {
background-color: #bada55;
}
}
tbody {
tr {
amp;:hover {
background-color: rgba(255,255,255,0.3);
}
}
td {
position: relative;
amp;:hover {
amp;:before {
content: "";
position: absolute;
left: 0;
right: 0;
top: -9999px;
bottom: -9999px;
background-color: rgba(255,255,255,0.2);
z-index: -1;
}
}
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<h1 id="title">List of codes</h1>
<!-- Table structure here -->
<table id="our-table">
<thead>
<tr>
<th>Code</th>
<th>Result</th>
</tr>
</thead>
<tbody id="table-body">
<!-- Table creates here -->
</tbody>
</table>
</div>
Комментарии:
1. Каково точное ожидание? Я вижу, что код работает нормально. Нужна ясность. @Sauce
2. Я хочу создать функцию, которая вставляет столько таблиц, сколько я хочу, в мой HTML-код. Таблицы имеют одинаковое количество столбцов (2). @Anglesvar Cheenu
3. Если вы хотите создать количество таблиц в зависимости от количества имеющихся у вас данных, вы должны создавать таблицу каждый раз. Вам не следует определять таблицу в вашем HTML-файле. Вы должны создать таблицу при доступе к данным, и вы должны
id
определить для каждой таблицы. Это правильный способ приблизиться к вашим ожиданиям.4. Заголовки таблиц совпадают? («код», «результат»)?
5. Да, заголовки одинаковы в каждой таблице.
Ответ №1:
var firstTable = [
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablabla',
}
]
var secondTable = [
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
}
]
const addTable = (param)=>{
let tab = `<table>`;
let newtab= `<tr><th>Code</th><th>result</th></tr>`;
for (var i = 0; i < param.length; i ) {
newtab = `<tr><td>${param[i].code}</td><td>${param[i].result}</td></tr>`;
}
tab =`${newtab}</table>`;
display.innerHTML = tab;
}
addTable(firstTable);
addTable(secondTable);
<div id="display"></div>
Создайте параметризованную функцию, передайте функции объект JSON таблицы, которую вы хотите создать. Запустите цикл в функции, основанный на длине массива переданных вами объектов. Я поместил их в функцию, чтобы включить возможность повторного использования и использовать события для запуска функции всякий раз, когда вы хотите добавить новую таблицу, тем самым делая ее гибкой. Я надеюсь, что это поможет.
Комментарии:
1. Это помогает, но это решение выводит только последние строки из таблиц.
2. упс, я увидел ошибку, теперь я отредактирую код, чтобы отобразить все.
3. Да, проблема внутри функции цикла
4. Теперь мне просто любопытно. Что, если я хочу иметь теги <table> и <tbody> для каждой таблицы в html и добавлять в скрипт только теги <tr>.
Ответ №2:
Вы можете определить данные, как указано ниже:
var data = [
[{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablabla',
}
],
//Second Data
[
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
},
{
'code': 'blabla',
'result': 'blablablablablabla',
}
]
и вы можете создавать таблицу каждый раз, когда вводите новые данные. Что-то вроде этого.
for(let node=0; node<data.length; node ){
//Here create your table with variable node as your id.
node.foreach((element)=>{
//append element data to the table created
}
}
Надеюсь, это поможет !!.. Удачного кодирования!!