2015-05-23 8 views
0

Вот ошибка:Не удается создать таблицу с помощью JS

Uncaught TypeError: Cannot read property 'appendChild' of null

Пример кода:

function MakeTable(Matrix){ 
    var newElem = document.createElement('table'); 
    newElem.border = "1px"; 
    for(var j = 0; j < Matrix.length; j++) { 
     var newRow = newElem.insertRow(j); 
     for(var n = 0; n < Matrix[j].length; n++) { 
      var newCell = newRow.insertCell(n); 
      newCell.innerText = Matrix[j][n]; 
     } 
    } 

    document.getElementById('table1').appendChild(newElem); 
} 
+0

Кажется довольно ясно, что ваш 'table1' элемент не найден в DOM. –

+0

Дана матриця:

1-A  -1  1  -1

   1   -1  1  -1

   1   -1  0   0

   1    0   0  1

Де А = 10^K, K = 12;

+0

Если скрипт находится в '' и не использует задержку, чтобы убедиться, что он не работает, когда пока не будет загружен DOM, то он будет работать до того, существует элемент , Переместите свой скрипт непосредственно перед закрывающим тегом ''. –

ответ

1

До тех пор, пока у вас есть элемент с table1 ID в DOM и до тех пор, пока скрипт не запускается до загрузки этого элемента, он будет работать.

function MakeTable(Matrix){ 
 
    var newElem = document.createElement('table'); 
 
    newElem.border = "1px"; 
 
    for(var j = 0; j < Matrix.length; j++) { 
 
     var newRow = newElem.insertRow(j); 
 
     for(var n = 0; n < Matrix[j].length; n++) { 
 
      var newCell = newRow.insertCell(n); 
 
      newCell.textContent = Matrix[j][n]; 
 
     } 
 
    } 
 

 
    document.getElementById('table1').appendChild(newElem); 
 
} 
 

 
MakeTable([["this", "is"], ["my", "table"]]);
<div id=table1></div>

Я также изменил .innerText к .textContent поскольку это соответствуют стандартам способ установки текста.

0

Он вернулся, что я связан сценарий не в теле, а в голове)

1

При создании элемента, вы должны добавить его. Здесь:

document.body.appendChild(table) 

Изменение последней строки:

function MakeTable(Matrix){ 
    var newElem = document.createElement('table'); 
    newElem.border = "1px"; 
    for(var j = 0; j < Matrix.length; j++) { 
     var newRow = newElem.insertRow(j); 
     for(var n = 0; n < Matrix[j].length; n++) { 
      var newCell = newRow.insertCell(n); 
      newCell.innerText = Matrix[j][n]; 
     } 
    } 
    document.body.appendChild(newElem); 
} 

По соглашению вы написать первую букву имени функции в нижнем регистре (за исключением имени класса).

Demo

Смежные вопросы