JavaScript для создания HTML-таблицы - PullRequest
0 голосов
/ 10 мая 2018

В настоящее время я пытаюсь использовать JavaScript для создания таблицы, используя количество элементов из двух других созданных таблиц. Вот что я пытаюсь сделать до сих пор:

HTML:

<!-- Scrollable y-axis line of days above the scheduler -->
  <div id="table-wrapper-days">
    <div id="table-scroll-days">
      <table id="dayRow">
        <tr>
          <td>Monday 5/7</td>
          <td>Tuesday 5/8</td>
          <td>Wednesday 5/9</td>
          <td>Thursday 5/10</td>
          <td>Friday 5/11</td>
          <td>Saturday 5/12</td>
          <td>Sunday 5/13</td>
          <td>Monday 5/14</td>
          <td>Tuesday 5/15</td>
          <td>Wednesday 5/16</td>
          <td>Thursday 5/17</td>
          <td>Friday 5/18</td>
          <td>Saturday 5/19</td>
          <td>Sunday 5/20</td>
          <td>Monday 5/21</td>
          <td>Tuesday 5/22</td>
          <td>Wednesday 5/23</td>
          <td>Thursday 5/24</td>
          <td>Friday 5/25</td>
          <td>Saturday 5/26</td>
          <td>Sunday 5/27</td>
          <td>Monday 5/28</td>
          <td>Tuesday 5/29</td>
          <td>Wednesday 5/30</td>
          <td>Thursday 5/31</td>
          <td>Friday 6/1</td>
          <td>Saturday 6/2</td>
          <td>Sunday 6/3</td>
        </tr>
      </table>
    </div>
  </div>

  <!-- Scrollable x-axis column of employees to the left of the scheduler -->
  <div id="table-wrapper-employees">
    <div id="table-scroll-employees">
      <table id="employeeCol", class="tableEmployees">
        <tr><td>Employee A</td></tr>
        <tr><td>Employee B</td></tr>
        <tr><td>Employee C</td></tr>
        <tr><td>Employee D</td></tr>
        <tr><td>Employee E</td></tr>
        <tr><td>Employee F</td></tr>
        <tr><td>Employee G</td></tr>
        <tr><td>Employee H</td></tr>
        <tr><td>Employee I</td></tr>
        <tr><td>Employee J</td></tr>
        <tr><td>Employee K</td></tr>
        <tr><td>Employee L</td></tr>
        <tr><td>Employee M</td></tr>
        <tr><td>Employee N</td></tr>
        <tr><td>Employee O</td></tr>
        <tr><td>Employee P</td></tr>
        <tr><td>Employee Q</td></tr>
        <tr><td>Employee R</td></tr>
        <tr><td>Employee S</td></tr>
        <tr><td>Employee T</td></tr>
        <tr><td>Employee U</td></tr>
        <tr><td>Employee V</td></tr>
        <tr><td>Employee W</td></tr>
        <tr><td>Employee X</td></tr>
        <tr><td>Employee Y</td></tr>
        <tr><td>Employee Z</td></tr>
    </table>
  </div>
</div>

  <!-- Main body table to house the task graphics -->
  <div id="table-wrapper-scheduler">
    <div id="table-scroll-schedular">
      <script>createMainTable()</script>
    </div>
  </div>

JS:

function createMainTable() {
  var rows = document.getElementById('dayRow').getElementsByTagName("td").length;
  var cols = document.getElementById('employeeCol').getElementsByTagName("tr").length;

  var drawTable += '<table class="tableTasks">';
  for (int i = 0; i < rows; i++) {
    drawTable += '<tr>';
    for(int j = 0; j < cols; j++) {
      drawTable += '<td>Task</td>';
    }
    drawTable += '</tr>';
  }
  drawTable += '</table>';

  document.write(drawTable);
}

Проблема в том, что когда я запускаю это, ничего не отображается. Я пытаюсь использовать JavaScript для создания таблицы с сеткой, которая позже будет использоваться в качестве планировщика. Я сожалею, что в настоящее время все жестко запрограммировано для тестирования. Я изучаю HTML, как я иду вместе с этим проектом.

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Заметка на одной стороне, но она слишком велика для комментария и содержит код.

document.write следует избегать, когда вы вызываете его, он очищает страницу, потому что он вызывает open, чтобы создать таблицу в JS, вы можете использовать этот код, который я считаю самым коротким.

var div = document.createElement('div');
div.innerHTML = drawTable;
document.body.appendChild(div);

более длинный код потребует вызова createElement для <tr> и <td> и создания древовидной структуры для вашей таблицы:

  var rows = 10, cols = 10;
  var table = document.createElement('table');
  table.className = 'tableTasks';
  for (var i = 0; i < rows; i++) {
    var tr = document.createElement('tr');
    table.appendChild(tr);
    for(var j = 0; j < cols; j++) {
      var td = document.createElement('td');
      td.innerHTML = 'Task';
      tr.appendChild(td);
    }
  }
  document.body.appendChild(table);

И ошибки в вашем коде:

function createMainTable() {
  var rows = document.getElementById('dayRow').getElementsByTagName("td").length;
  var cols = document.getElementById('employeeCol').getElementsByTagName("tr").length;

  // var drawTable += '<table class="tableTasks">';
  // it should be this, because your create variable so it don't exist before
  var drawTable = '<table class="tableTasks">';
  // for (int i = 0; i < rows; i++) {
  // in JS you need to use var not int like in java
  for (var i = 0; i < rows; i++) {
    drawTable += '<tr>';
    for(int j = 0; j < cols; j++) {
      drawTable += '<td>Task</td>';
    }
    drawTable += '</tr>';
  }
  drawTable += '</table>';
  // this will remove your other tables.
  document.write(drawTable);
}
0 голосов
/ 10 мая 2018

Я фактически использовал int вместо того, чтобы впустить мой javascript для циклов, которые вызвали ошибку.

for (int i = 0; i < rows; i++) {
   drawTable += '<tr>';
   for (int j = 0; j < cols; j++) {
      drawTable += '<td>Task</td>';
   }
      drawTable += '</tr>';
}
drawTable += '</table>';

Замените int на let, исправив мою проблему. В любом случае, спасибо!

0 голосов
/ 10 мая 2018

Вы установили свой метод на onLoad атрибут in?

, который должен быть:

...
<body onLoad="createMainTable()"></body>
...

, или вы пытаетесь поместить свой код непосредственно на <script></script> в <div id="table-scroll-schedular">

должно быть:

<div id="table-scroll-schedular">
    <script type="text/javascript">
        //paste your code at here without function declaration
    </script>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...