Функция Javascript для добавления строки в таблицу HTML не работает

0

Я разработал две функции javascript, которые создают таблицу html (showList4()) и которые добавляют строки (addRow()), PLS см. Код ниже. showList4() отлично работает, но addRow() не работает; addRow() добавляет строку, но:

(ошибка 1): строка не добавляется прямо под предыдущей строкой, а сдвигается влево.

(ошибка 2): выполнение addRow второй раз не помещает строку после/под ранее добавленной строкой, но до/над ней.

Для добавления строки я посмотрел на решение в строке Добавить таблицу в jQuery, но я не знаю, где я ошибаюсь с кодом addRow()?

Код javascript:

function showList4(title, wrapper, wrappermethod, tableid){ //this functions works fine

   if((!$('#'+wrapper).length) ){//no action if no info or invalid wrapper agurment type
        return;
   }//if

   var form = '<table id="'+tableid+'">';

   //add title
   if(typeof title === 'string'){
       form += '<caption> '+ title +' </caption>';
   }//if
   form += '<tbody>';
   var nrofrows = arguments.length - 4;
   console.log('Showlist3- nrofrows: '+nrofrows)
   //add following rows with vert labels in first colum and datavalues in following columns
   for(var row=0;row<nrofrows;row++){ //for each following row 
       form += '<tr> <td> ';
       for(var column=0, column_max=arguments[4+row].length;column<column_max;column++){
           if(arguments[4+row] !== undefined){
                form += '<td>' + arguments[4+row][column] + ' </td>';
           }//if
       }//for(var column=0, column_max=labels_hori.length;column<column_max;column++){
       form += '</tr>';
   }//for(var i=0,i_max=labels_hori.length;i<i_max;i++

   form += '<tr><td> </tr></td> </tbody> </table>'; //add empty line and finish table

   switch(wrappermethod){
       case 'html':
           $('#'+wrapper).html(form);
           break;
       default: //no action if invalid wrapper argument
           break;
   };//switch
   return;

};//showList4()

function addRow(tableid,values){
   var form = '<tr>';
   for(var i=0,i_max=values.length;i<i_max;i++){
       form += '<td>' + values[i] + '</td>';
   }//for
   form += '</tr>';

   $('#'+tableid+' > tbody:last').after(form); //reference example code: /questions/458/add-table-row-in-jquery
   //$('#'+tableid+' tr:last').after(form); //reference example code: /questions/458/add-table-row-in-jquery
   return;
}//addrow


$(document).ready(function(){

        showList4('Title table','myDivid','html','myTable',
                      ['Some text1','Some text2','Some text3','Some text4'],
                      ['1','2','3','4']);

        addRow('myTable',['A','B','C','D']);
        addRow('myTable',['E','F','G','H']);

});//$(document).ready(function(){

html-код:

<div id="myDivid" style="width:500px; "> </div>
  • 0
    Почему вы говорите, что это не работает? ... Я скопировал и вставил ваш код, и он работает: jsfiddle.net/eyanez/JSKXc
  • 0
    Это работает в том смысле, что 2 строки с рисунком добавляются ниже первого ряда. Но ваш jsfiddle также показывает, что добавленные строки расположены внизу слева до первой строки, например, буквы E и A не являются прямыми под '1'. Кроме того, после строки [1, 2, 3, 4] я бы хотел / хотел бы ожидать строки [A, B, C, D], а не [E, F, G, H], как также показано в вашем jsfiddle.
Теги:

1 ответ

0
Лучший ответ

В коде есть несколько ошибок.

Во-первых, вы нацеливаете "последний тег тела", а не "последнюю строку в теле". Так измените свою линию

$('#'+tableid+' > tbody:last').after(form);

в

$('#'+tableid+' > tbody > tr:last').after(form);

Это гарантирует, что новая строка будет вставлена в body таблицы.

Во-вторых, вы создаете дополнительную ячейку в своих первых двух строках. См. Эту строку

form += '<tr> <td> '; 

Измените его на

form += '<tr>';

В-третьих, вы нарушили html на этой строке

form += '<tr><td> </tr></td> </tbody> </table>'; //add empty line and finish table

Измените его на

form += '<tr><td colspan="4"></td></tr></tbody> </table>'; //add empty line and finish table. NOTE the colspan to format the table correctly.

Вот рабочая версия jsbin

ps jsbin предлагает некоторые другие исправления недостающих полуколоний, неправильное использование оператора switch и ненужных полуколоней.

  • 0
    потрясающе, спасибо Тим (!).
  • 0
    ps: никогда раньше не использовал jsbin (просто jsfiddle), тоже очень полезно ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню