Я разработал две функции 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>
В коде есть несколько ошибок.
Во-первых, вы нацеливаете "последний тег тела", а не "последнюю строку в теле". Так измените свою линию
$('#'+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 и ненужных полуколоней.