Таблица HTML и JavaScript addRows и addColumns без jQuery?

У меня проблема с работой кнопок в таблице оценок учащихся, у меня есть кнопка для вычисления среднего значения оценок с помощью функции getAverage(), у меня есть кнопка для вставки строк в таблицу с помощью функции с именем insert_Rows, и, наконец, один для добавления столбцов с помощью функции с именем insert_Column().

Моя проблема в том, что ни одна из них не работает, и я не понимаю, почему работала функция getAverage, пока не добавил две другие кнопки.

Это для задания, где мне не разрешено использовать jQuery.

Кроме того, это краткое описание двух кнопок:

  1. Кнопка в стиле CSS, которая вставляет новую строку таблицы, подходящую для записи новых данных учащихся. Вы можете вставить после последней строки таблицы. Студенты должны предоставить кнопку, которая сохраняет таблицу в ее текущем состоянии, т.е. если есть 5 строк и 6 ячеек, файл cookie должен отражать это.

  2. Кнопка в стиле CSS, которая вставляет новый столбец таблицы, подходящий для записи новых данных об оценке задания. Этот столбец требует заголовка. Вы можете решить, как вы хотите выполнить распределение заголовков (автоматическое, редактирование контента и т. д.). Должна быть еще одна кнопка, которая затем извлекает эти данные и заполняет их обратно в таблицу в том состоянии, в котором она находилась ранее. Если были добавлены дополнительные строки или столбцы, таблица должна вернуться к своему предыдущему состоянию на момент сохранения файла cookie (5 строк и 6 ячеек).

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

// get the average
function getAverage()
{
    let table = document.getElementById("gradesTable");  
    //Loop over the rows array directly
  let rows = Array.prtotype.slice.call(table.rows); //let is block scoped - can only be used in this block
  rows.froEach(function(row)
  {
    let cells = array.protoype.slice.call(row.querySelectorAll(".Assignment")); // Get all the Assignment cells into an array

    // declairing sum and gradeAverage with let and by defining them in the row loop keeps the values unique for each row
    let sum = 0; 
    let gradeAverage = 0;

    // Now just loop the cells Array
    cells.forEach(function(cell,index){

     //.textContent instead for strings that dont contain any values
      var currentValue = parseInt(cell.textContent);
      if (currentValue >= 0 && currentValue <=100){
          sum += currentValue;
      }

      // If the cell has "-" for content
      if (cell.textContent === '"-"'){
        // Apply a pre-made CSS class
        cell.classList.add("noGrade");
      } else {
        // Remove a pre-made CSS class
        cell.classList.remove("noGrade");
      }

      // If this is the last cell in the row
      if (index === cells.length-1){
        gradeAverage = sum/5;
        cell.nextElementSibling.textContent = Math.round(gradeAverage) + "%";

        // There is a grade, so check it for low
        if (gradeAverage >= 0 && gradeAverage < 40) {
          cell.nextElementSibling.classList.add("lowGrade");
        } else {
          cell.nextElementSibling.classList.remove("lowGrade");
        }
      }

    });
  });

}

// add a row to the table
function insert_Row() {
  let table = document.getElementById("gradesTable"); //assign table id to a variable
  let tableRows = table.rows.length; // gives how many rows in the table
  let row = table.insertRow(tableRows); //insert after the last row in the table
  let cellsInTable = document.getElementById("gradesTable").rows[0].cells 
  let columnTotal = cellsInTable.length; //assign the columnTotal the number of columns that the first row has

  //loop through each column
  for(let i = 0; i < columnTotal; i++)
  {
    //add a new cell for each column
    let cell = row.insertCell(i);

    //assign each new cell the default value "-"
    cell.innerHTML = "-";


  }

}

// add a column to the HTML table
function appendColumn() 
{
    let table = document.getElementById("gradesTable"); // table reference

    // open loop for each row and append cell
    for(let x = 0; x < table.rows.length; x++)
    {
        createCell(tbale.rows[x].insertCell(table.rows[x].cells.lenght), x, "col");
    }      
}


function insert_Column()
{

}
function deleteColumn()
{
    let allRows = document.getElementById("gradesTable").rows;
    for (var i=0; i < allRows.length; i++) 
  {
        if (allRows[i].cells.length > 1) 
    {
            allRows[i].deleteCell(-1);
        }
    }
}

Исправление, функция «Вставить строку», кажется, работает правильно, но функция средних оценок — нет, и я не знаю, с чего начать писать другие функции.

Если кто-нибудь может предложить совет или лучшие места для обучения? Поскольку мой лектор только что проинформировал нас об использовании W3Schools, и он не учит нас языку, я просто чувствую себя не в своей тарелке.

let cells = array.protoype.slice.call(... Хочешь Array не array; JavaScript чувствителен к регистру. Или просто используйте Array.from(...). Вы должны получить сообщение об ошибке в своей консоли, хотя ...
Heretic Monkey 06.03.2019 22:10

Спасибо, я исправил это, но, как ни странно, это не мешало моей функции insert_Row работать

Darragh.H 06.03.2019 22:18

Я настоятельно рекомендую изучить отладчик JavaScript в выбранном вами браузере. Тогда вы сможете точно увидеть, что происходит в каждой строке вашего кода.

Heretic Monkey 06.03.2019 22:20

+1, у вас много прямых опечаток в приведенном выше коде, которые были бы сразу очевидны в ошибках, которые вам показывает chrome devtools.

dgrogan 07.03.2019 02:49
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
58
0

Другие вопросы по теме