Рассмотрите возможность использования объектов jQuery для улучшения вашего кода. Пример:
var myData = "Name,City,Country\r\nWilliam,Yamrat,Nigeria";
/*
$.ajax({
url: 'csv_data.csv',
dataType: 'text',
}).done(successFunction);
*/
$(function() {
function successFunction(data) {
var allRows = data.split(/\r?\n|\r/);
var tbl = $("<table>");
tbl.append($("<thead>"), $("<tbody>"));
$.each(allRows, function(i, row) {
var cells = row.split(",");
console.log(row, cells);
if (i == 0) {
$("<tr>").appendTo($("thead", tbl));
$.each(cells, function(k, v) {
$("thead > tr", tbl).append($("<th>").html(v));
});
} else {
var r = $("<tr>").appendTo($("tbody", tbl));
$.each(cells, function(k, v) {
r.append($("<td>").html(v));
});
}
});
console.log(tbl.prop("outerHTML"));
$("h2:first").before(tbl);
}
successFunction(myData);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2>Test</h2>
Предложите использовать .before()
для добавления элемента перед селектором. Если это конкретный элемент h2
, лучше всего присвоить элементу уникальный идентификатор или определенный класс:
<h2 class="banner">Test</h2>
затем используйте это для добавления: $(".banner")
в противном случае вы добавите все элементы h2
. Селектор является ключом.
В зависимости от того, сколько таблиц вы составляете, вы можете рассмотреть возможность перемещения этого в функцию:
function makeTable(r, h){
var tbl = $("<table>");
if(h == undefined){
h = false;
}
if(h){
tbl.append($("<thead>"));
}
tbl.append($("<tbody>"));
$.each(r, function(i, row) {
var cells = r.split(",");
if (i == 0 && h) {
$("<tr>").appendTo($("thead", tbl));
$.each(cells, function(k, v) {
$("thead > tr", tbl).append($("<th>").html(v));
});
} else {
var tr = $("<tr>").appendTo($("tbody", tbl));
$.each(cells, function(k, v) {
tr.append($("<td>").html(v));
});
}
});
return tbl;
}
Тогда используйте так:
var myTable = makeTable(allRows, true);
$("h2").before(myTable);
Надеюсь, это поможет.