заменить данные таблицы выбранными данными (javascript) - PullRequest
0 голосов
/ 08 апреля 2020

javascript новичок здесь, пытающийся кодировать и учиться.

У меня есть таблица, заполненная данными (выборка из URL), и эти данные

{
  "france": "paris",
  "finland": "helsinki",
  "sweden": "stockholm",
  "tajikistan": "dushanbe",
  "uzbekistan ": "toshkent",
  "china": "peking",
  "dole": {
    "Key": "fhd699f"
  }
}

и находятся под таблицей У меня есть поле выбора (данные также извлекаются из URL), его данные это

[
{"nimi": "tili","id": "48385","somewhere": "nassau","somewhere2": "bamako","somewhere3": "rabat","somewhere4": "baku"},
{"nimi": "tili","id": "789642","somewhere": "windhoek","somewhere2": "podgorica","somewhere3": "niamey","somewhere4": "islamabad"}
]

Я хочу заменить данные таблицы выбранными данными (я имею в виду все), даже таблицы <th> также Например, <th> таблицы - это 'Франция', а значение - 'Париж', но после замены таблицы <th> должно быть 'nimi' и значение 'tili' в соответствии с данными блока выбора. вот мой код (как вы видите «таджикистан», «узбекистан», «китай» по какой-то причине не идут на свои места в таблице):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width">
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
    <style>
    </style>
	
</head>
<body>



<div class="container">

<table class="table  "> 
  <thead>	
    <tr>
	  <th class="table-success">france</th>
      <th class="table-success">finland</th>
      <th class="table-success">sweden</th>
    </tr>
  </thead>
 <tbody id="tiedot">  
  </tbody>

  <thead>
    <tr>
      <th class="table-success">tajikistan</th>	
      <th class="table-success">uzbekistan</th>
      <th class="table-success">china</th>
    </tr>
  </thead>
 <tbody id="tiedot2">  
  </tbody>

</table>

<select id="valittu" name="name"></select>

</div>

<script>
    fetch(
            "https://tdejdjd***",
            {
              method: "GET",
              headers: {
                "x-api-key": "i****y"
              }
            }
          )
  .then((res) => {
  res
    .json()
    .then((data) => {
      tableupdating(data, ['france','finland','sweden','tajikistan','uzbekistan','china']);
    })
    .catch((err) => {
      console.log("ERROR: " + err);
});
});
   
function tableupdating(data, values) {
  const totable = document.getElementById("tiedot");
  const totable2 = document.getElementById("tiedot2");
  
  totable.innerHTML = "";
  totable2.innerHTML = "";
  
  var komb = "";
  var komb2 = "";
  komb += "<tr>";
  komb2 += "<tr>";

  values.forEach(value => {
      komb += "<td>" + data[value] + "</td>";
  })
    values.forEach(value => {
      komb2 += "<td>" + data[value] + "</td>";
  })
  totable.insertAdjacentHTML("beforeend", komb);
  totable2.insertAdjacentHTML("beforeend", komb2);
}
let dataArray;
    fetch(
            "https://tdejdjd***",
            {
              method: "GET",
              headers: {
                "x-api-key": "i****y"
              }
            }
          )
  .then((res) => {
  res.json().then((data) => {
    dataArray = data;
    updateSelect(data, ['nimi','id']);
  });
});
function updateSelect(data, values) {
  for (var i = 0; i < data.length; i++) {
    var Valittu = document.getElementById("valittu");
    var option = document.createElement("option");
    values.forEach(value => {
        option.textContent += data[i][value] + ' '
    })
    Valittu.appendChild(option);
  }
}
   
document.getElementById("valittu").addEventListener("change", function (event) {
  const chosenID = event.target.value.split(" ")[1];

  const chosenData = dataArray.filter((data) => data.id === chosenID)[0];

  tableupdating(chosenData, ['nimi', 'id', 'somewhere','somewhere2','somewhere3','somewhere4']);
});
   
   
</script>




</body>
</html> 

, как говорится в чате, вот новый код, он работает, но по какой-то причине эти три находятся в одной строке, а не на своих местах: komb += "<td>"+tiedot.tajikistan+"</td>"; komb += "<td>"+tiedot.uzbekistan+"</td>"; komb += "<td>"+tiedot.china+"</td></tr>";

код:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width">
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
    <style>
    </style>
	
</head>
<body onload="fillTheBox();">
    <div class="container">
        <table class="table" id="myTable">
            <thead>
                <tr>
                    <th class="table-success">france</th>
                    <th class="table-success">finland</th>
                    <th class="table-success">sweden</th>
                </tr>
            </thead>
            <tbody id="tiedot">
            </tbody>

            <thead>
                <tr>
                    <th class="table-success">tajikistan</th>
                    <th class="table-success">uzbekistan</th>
                    <th class="table-success">china</th>
                </tr>
            </thead>
        </table>
        <select id="valittu" name="name" onchange="changed()"></select>
    </div>

    <script>
	fetch("https://qj",
              {
              method: "GET",
              headers: {
                 "x-api-key": ""
              }
            }
          ).then(res =>{ 
    res.json().then(tiedot => {
        console.log(tiedot);
        var komb  ="";
      


        komb  +="<tr>";
        komb  += "<td>"+tiedot.france+"</td>";
        komb  += "<td>"+tiedot.finland+"</td>";
        komb  += "<td>"+tiedot.sweden+"</td>";
		komb  += "<td>"+tiedot.tajikistan+"</td>";
	    komb  += "<td>"+tiedot.uzbekistan+"</td>";
		komb  += "<td>"+tiedot.china+"</td></tr>";

        document.getElementById("tiedot").insertAdjacentHTML("beforeend", komb );
	


    }
  )
})
        var dataArray = [
            { "nimi": "tili", "id": "48385", "somewhere": "nassau", "somewhere2": "bamako", "somewhere3": "rabat", "somewhere4": "baku" },
            { "nimi": "tili", "id": "789642", "somewhere": "windhoek", "somewhere2": "podgorica", "somewhere3": "niamey", "somewhere4": "islamabad" }
        ]
        function fillTheBox() {
            var selectBox = document.getElementById("valittu");
            var option = document.createElement("option");
            option.value = dataArray[0];
            option.text = dataArray[0].nimi+' '+dataArray[0].id;
            selectBox.add(option);
            var option1 = document.createElement("option");
            option1.value = dataArray[1];
            option1.text = dataArray[1].id;
            selectBox.add(option1);
        }
        function changed() {
            var e = document.getElementById("valittu");
            var selectedObjectID = e.options[e.selectedIndex].text;
            chosenData = dataArray.filter((data) => data.id === selectedObjectID)[0];
            var myTable = document.getElementById("myTable");
            myTable.innerHTML = "";
            generateTable(myTable, chosenData);
        }
    function generateTable(table, data) {
        let row1 = table.insertRow();
        row1.className = "table-success";
        let row2 = table.insertRow();
   
        let row3 = table.insertRow();
        row3.className = "table-success";
        let row4 = table.insertRow();
 
        var counter = 1;
        for (key in data) {
            if (counter<=3) {
                let cell = row1.insertCell();
                let text = document.createTextNode(key);
                cell.appendChild(text);
                let cell2 = row2.insertCell();
                let text2 = document.createTextNode(data[key]);
                cell2.appendChild(text2);
            } else {
                let cell = row3.insertCell();
                let text = document.createTextNode(key);
                cell.appendChild(text);
                let cell2 = row4.insertCell();
                let text2 = document.createTextNode(data[key]);
                cell2.appendChild(text2);
            }
            counter++;
        }
    }
    </script>
</body>
</html>

1 Ответ

0 голосов
/ 08 апреля 2020

Я создал демонстрационную версию c, чтобы показать логи c. Елки дают id вашему столу. И создайте событие onChange для вашего поля выбора. В вашей функции события отредактируйте содержимое таблицы с помощью свойства innerHTML. Просто сосредоточьтесь на change() и generateTable() функциях в моем коде

<body onload="fillTheBox();">
    <div class="container">
        <table class="table" id="myTable">
            <thead>
                <tr>
                    <th class="table-success">france</th>
                    <th class="table-success">finland</th>
                    <th class="table-success">sweden</th>
                </tr>
            </thead>
            <tbody id="tiedot">
            </tbody>

            <thead>
                <tr>
                    <th class="table-success">tajikistan</th>
                    <th class="table-success">uzbekistan</th>
                    <th class="table-success">china</th>
                </tr>
            </thead>
        </table>
        <select id="valittu" name="name" onchange="changed()"></select>
    </div>

    <script>
        var dataArray = [
            { "nimi": "tili", "id": "48385", "somewhere": "nassau", "somewhere2": "bamako", "somewhere3": "rabat", "somewhere4": "baku" },
            { "nimi": "tili", "id": "789642", "somewhere": "windhoek", "somewhere2": "podgorica", "somewhere3": "niamey", "somewhere4": "islamabad" }
        ]
        function fillTheBox() {
            var selectBox = document.getElementById("valittu");
            var option = document.createElement("option");
            option.value = dataArray[0];
            option.text = dataArray[0].id;
            selectBox.add(option);
            var option1 = document.createElement("option");
            option1.value = dataArray[1];
            option1.text = dataArray[1].id;
            selectBox.add(option1);
        }
        function changed() {
            var e = document.getElementById("valittu");
            var selectedObjectID = e.options[e.selectedIndex].text;
            chosenData = dataArray.filter((data) => data.id === selectedObjectID)[0];
            var myTable = document.getElementById("myTable");
            myTable.innerHTML = "";
            generateTable(myTable, chosenData);
        }
    function generateTable(table, data) {
        let row1 = table.insertRow();
        row1.className = "table-success";
        let row2 = table.insertRow();
        row2.className = "table-success";
        let row3 = table.insertRow();
        row3.className = "table-success";
        let row4 = table.insertRow();
        row4.className = "table-success";
        var counter = 1;
        for (key in data) {
            if (counter<=3) {
                let cell = row1.insertCell();
                let text = document.createTextNode(key);
                cell.appendChild(text);
                let cell2 = row2.insertCell();
                let text2 = document.createTextNode(data[key]);
                cell2.appendChild(text2);
            } else {
                let cell = row3.insertCell();
                let text = document.createTextNode(key);
                cell.appendChild(text);
                let cell2 = row4.insertCell();
                let text2 = document.createTextNode(data[key]);
                cell2.appendChild(text2);
            }
            counter++;
        }
    }
    </script>
</body>
</html>

ОБНОВЛЕНИЕ: Чтобы отделить поля, упомянутые в вопросе, добавьте элемент <tr> между ними.

    komb  +="<tr>";
    komb  += "<td>"+tiedot.france+"</td>";
    komb  += "<td>"+tiedot.finland+"</td>";
    komb  += "<td>"+tiedot.sweden+"</td>";
    komb  +="</tr><tr>";
    komb  += "<td>"+tiedot.tajikistan+"</td>";
    komb  += "<td>"+tiedot.uzbekistan+"</td>";
    komb  += "<td>"+tiedot.china+"</td></tr>";
...