Próbowałem utworzyć tabelę html z zagnieżdżonej tablicy pętli for w JavaScript. Kiedy próbuję dołączyć <tr>
znaczniki do stołu, które umieszcza się w elemencie zwanym tbody. Jak mogę dodać znaczniki tr do dołączenia do elementu table zamiast elementu tbody?
<html>
<head>
<script src="jq.js"></script>
</head>
<body>
<table id="tb"></table>
</body>
<script>
$("#tb").ready(
function() {
console.log("table loaded");
var ar = Array(2);
for(var i=0;i<ar.length;i++){
ar[i]=Array(2);
}
ar[0][0]="1";
ar[1][0]="2";
ar[0][1]="3";
ar[1][1]="4";
console.log("multidimensional array created!");
for(var j=0;j<ar.length;j++){
console.log("<tr>");
$("#tb").append("<tr>");
for(var k=0;k<2;k++){
console.log("<td>"+ar[k][j]+"</td>");
$("#tb").append("<td>"+ar[k][j]+"</td>");
}
console.log("</tr>");
$("#tb").append("</tr>");
}
//expected:
//12
//34
//actual
//1 2 3 4
});
</script>
</html>
Tutaj jest jsfiddle
Odpowiedzi:
2 dla odpowiedzi № 1Nie powinieneś dodawać takich treści do twojego stołu, ponieważ przeglądarka musi przerysować cały DOM, więc nie jest zbyt wydajna.
Powinieneś zbudować swój stół w ciągu znaków, a następnie dodać cały ciąg do tabeli, na przykład:
$("#tb").ready(
function() {
console.log("table loaded");
var ar = Array(2);
for(var i=0;i<ar.length;i++){
ar[i]=Array(2);
}
ar[0][0]="1";
ar[1][0]="2";
ar[0][1]="3";
ar[1][1]="4";
console.log("multidimensional array created!");
//Prepare the outputed string
var theTable = "";
for(var j=0;j<ar.length;j++){
theTable += "<tr>";
for(var k=0;k<2;k++){
theTable += "<td>"+ar[k][j]+"</td>";
}
theTable += "</tr>";
}
//Finally appended the whole string to the table
$("#tb").append(theTable);
//expected:
//12
//34
//actual
//1 2 3 4
});
Zrobiłem dla ciebie Jsfiddle: JSFiddle
Baw się dobrze !
3 dla odpowiedzi № 2
Nie możesz. T. Tabele HTML składają się z trzech sekcji:
thead
zawiera wiersze nagłówkatbody
zawiera wiersze danych. Możesz mieć wiele z nich, jeśli chcesz tworzyć różne grupy wierszy (np. Jeśli wiersze = miesiące, możesz mieć osobnetbody
za każdy rok).tfoot
zawiera wiersze stopki
Jeśli umieścisz wiersze bezpośrednio w table
tag, zakładają, że są częścią tbody
, a przeglądarka automatycznie utworzy ten element. Musisz umieścić wszystkie swoje wiersze tbody
elementy lub umieść je wszystkie bezpośrednio w środku table
.
Problem z twoim kodem nie ma nic wspólnego z tbody
element. Problem polega na tym, że próbujesz się przyłączyć td
elementy bezpośrednio do tabeli, a nie do tr
elementy. Leczysz $("#tb").append()
tak, jakby łączył tekst HTML z dokumentem, nie wstawiając całych elementów HTML. Powinien to być coś takiego:
for(var j=0;j<ar.length;j++){
console.log("<tr>");
var row = $("<tr/>").appendTo("#tb");
for(var k=0;k<2;k++){
console.log("<td>"+ar[k][j]+"</td>");
row.append("<td>"+ar[k][j]+"</td>"); // Append TD to TR
}
}
Lub możesz użyć odpowiedzi CtrlX, gdzie komponuje całą tabelę jako ciąg, a następnie wstawia ją do DOM w jednym kroku. Jest to bardziej efektywne niż budowanie tabeli narastająco.
0 dla odpowiedzi № 3
<body>
<table id="tb1">
<tbody id="tb">
</tbody>
</table>
</body>
<script>
$("#tb").ready(
function() {
console.log("table loaded");
var ar = Array(2);
for(var i=0;i<ar.length;i++){
ar[i]=Array(2);
}
ar[0][0]="1";
ar[1][0]="2";
ar[0][1]="3";
ar[1][1]="4";
console.log("multidimensional array created!");
for(var j=0;j<ar.length;j++){
$("#tb").append("<tr>");
for(var k=0;k<2;k++){
$("#tb").append("<td>"+ar[k][j]+"</td>");
}
$("#tb").append("</tr>");
}
//expected:
//12
//34
//actual
//1 2 3 4
});
</script>
</html>
to działa kod na tym skrzypcach http://jsfiddle.net/fn4Wz/