J'ai sur la page div:
<div id="here_table"></div>
et en jquery:
for(i=0;i<3;i++){
$('#here_table').append( 'result' + i );
}
cette génération pour moi:
<div id="here_table">
result1 result2 result3 etc
</div>
Je voudrais recevoir ceci dans le tableau:
<div id="here_table">
<table>
<tr><td>result1</td></tr>
<tr><td>result2</td></tr>
<tr><td>result3</td></tr>
</table>
</div>
Je fais:
$('#here_table').append( '<table>' );
for(i=0;i<3;i++){
$('#here_table').append( '<tr><td>' + 'result' + i + '</td></tr>' );
}
$('#here_table').append( '</table>' );
mais cela génère pour moi:
<div id="here_table">
<table> </table> !!!!!!!!!!
<tr><td>result1</td></tr>
<tr><td>result2</td></tr>
<tr><td>result3</td></tr>
</div>
Pourquoi? Comment puis-je le faire correctement?
Cette ligne:
$('#here_table').append( '<tr><td>' + 'result' + i + '</td></tr>' );
Ajoute au div#here_table
pas à la nouvelle table
.
Il y a plusieurs approches:
/* Note that the whole content variable is just a string */
var content = "<table>"
for(i=0; i<3; i++){
content += '<tr><td>' + 'result ' + i + '</td></tr>';
}
content += "</table>"
$('#here_table').append(content);
Cependant, avec l’approche ci-dessus, il est moins facile d’ajouter des styles et de créer des éléments dynamiques avec <table>
.
Mais que dire de celui-ci, il fait ce que vous attendez presque génial:
var table = $('<table>').addClass('foo');
for(i=0; i<3; i++){
var row = $('<tr>').addClass('bar').text('result ' + i);
table.append(row);
}
$('#here_table').append(table);
J'espère que cela aiderait.
Vous devez ajouter la tr
à l'intérieur de la table
. J'ai donc mis à jour votre sélecteur dans votre boucle et supprimé la table
de clôture car ce n'est pas nécessaire.
$('#here_table').append( '<table />' );
for(i=0;i<3;i++){
$('#here_table table').append( '<tr><td>' + 'result' + i + '</td></tr>' );
}
Le problème principal était que vous ajoutiez la tr
à la div
here_table.
Edit: Voici une version JavaScript si les performances sont un sujet de préoccupation. L'utilisation de fragment de document ne provoque pas de refusion à chaque itération de la boucle
var doc = document;
var fragment = doc.createDocumentFragment();
for (i = 0; i < 3; i++) {
var tr = doc.createElement("tr");
var td = doc.createElement("td");
td.innerHTML = "content";
tr.appendChild(td);
//does not trigger reflow
fragment.appendChild(tr);
}
var table = doc.createElement("table");
table.appendChild(fragment);
doc.getElementById("here_table").appendChild(table);
Lorsque vous utilisez append
, jQuery s'attend à ce qu'il s'agisse d'un fichier HTML bien formé (le texte brut compte). append
n'est pas comme faire +=
.
Vous devez d'abord créer le tableau, puis l'ajouter.
var $table = $('<table/>');
for(var i=0; i<3; i++){
$table.append( '<tr><td>' + 'result' + i + '</td></tr>' );
}
$('#here_table').append($table);
Ou faites-le de cette manière pour utiliser ALL jQuery. Chacun peut parcourir toutes les données, qu'il s'agisse d'éléments DOM ou d'un tableau/objet.
var data = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight'];
var numCols = 1;
$.each(data, function(i) {
if(!(i%numCols)) tRow = $('<tr>');
tCell = $('<td>').html(data[i]);
$('table').append(tRow.append(tCell));
});
Pour ajouter plusieurs colonnes et lignes, nous pouvons également faire une concaténation de chaîne. Pas le meilleur moyen, mais ça marche.
var resultstring='<table>';
for(var j=0;j<arr.length;j++){
//array arr contains the field names in this case
resultstring+= '<th>'+ arr[j] + '</th>';
}
$(resultset).each(function(i, result) {
// resultset is in json format
resultstring+='<tr>';
for(var j=0;j<arr.length;j++){
resultstring+='<td>'+ result[arr[j]]+ '</td>';
}
resultstring+='</tr>';
});
resultstring+='</table>';
$('#resultdisplay').html(resultstring);
Cela vous permet également d'ajouter des lignes et des colonnes à la table de manière dynamique, sans coder en dur les noms de champs.
Voici ce que vous pouvez faire: http://jsfiddle.net/n7cyE/4/
$('#here_table').append('<table></table>');
var table = $('#here_table').children();
for(i=0;i<3;i++){
table.append( '<tr><td>' + 'result' + i + '</td></tr>' );
}
Meilleures salutations!
Ou HTML statique sans la boucle pour créer des liens (ou autre). Placez le <div id="menu">
sur une page pour reproduire le code HTML.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML Masterpage</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script type="text/javascript">
function nav() {
var menuHTML= '<ul><li><a href="#">link 1</a></li></ul><ul><li><a href="#">link 2</a></li></ul>';
$('#menu').append(menuHTML);
}
</script>
<style type="text/css">
</style>
</head>
<body onload="nav()">
<div id="menu"></div>
</body>
</html>
Ce qui suit est fait pour plusieurs téléchargements de fichiers en utilisant jquery:
Bouton de saisie de fichier:
<div>
<input type="file" name="uploadFiles" id="uploadFiles" multiple="multiple" class="input-xlarge" onchange="getFileSizeandName(this);"/>
</div>
Affichage du nom de fichier et de la taille du fichier dans un tableau:
<div id="uploadMultipleFilediv">
<table id="uploadTable" class="table table-striped table-bordered table-condensed"></table></div>
Javascript pour obtenir le nom du fichier et sa taille:
function getFileSizeandName(input)
{
var select = $('#uploadTable');
//select.empty();
var totalsizeOfUploadFiles = "";
for(var i =0; i<input.files.length; i++)
{
var filesizeInBytes = input.files[i].size; // file size in bytes
var filesizeInMB = (filesizeInBytes / (1024*1024)).toFixed(2); // convert the file size from bytes to mb
var filename = input.files[i].name;
select.append($('<tr><td>'+filename+'</td><td>'+filesizeInMB+'</td></tr>'));
totalsizeOfUploadFiles = totalsizeOfUploadFiles+filesizeInMB;
//alert("File name is : "+filename+" || size : "+filesizeInMB+" MB || size : "+filesizeInBytes+" Bytes");
}
}
Exemple de travail utilisant la méthode mentionnée ci-dessus et utilisant JSON pour représenter les données. Ceci est utilisé dans mon projet de traitement des appels ajax récupérant les données du serveur.
http://jsfiddle.net/vinocui/22mX6/1/
Dans votre html: <table id = 'here_table'> </ table>
Code JS:
function feed_table(tableobj){
// data is a JSON object with
//{'id': 'table id',
// 'header':[{'a': 'Asset Tpe', 'b' : 'Description', 'c' : 'Assets Value', 'd':'Action'}],
// 'data': [{'a': 'Non Real Estate', 'b' :'Credit card', 'c' :'$5000' , 'd': 'Edit/Delete' },... ]}
$('#' + tableobj.id).html( '' );
$.each([tableobj.header, tableobj.data], function(_index, _obj){
$.each(_obj, function(index, row){
var line = "";
$.each(row, function(key, value){
if(0 === _index){
line += '<th>' + value + '</th>';
}else{
line += '<td>' + value + '</td>';
}
});
line = '<tr>' + line + '</tr>';
$('#' + tableobj.id).append(line);
});
});
}
// testing
$(function(){
var t = {
'id': 'here_table',
'header':[{'a': 'Asset Tpe', 'b' : 'Description', 'c' : 'Assets Value', 'd':'Action'}],
'data': [{'a': 'Non Real Estate', 'b' :'Credit card', 'c' :'$5000' , 'd': 'Edit/Delete' },
{'a': 'Real Estate', 'b' :'Property', 'c' :'$500000' , 'd': 'Edit/Delete' }
]};
feed_table(t);
});
Quant à moi, cette approche est plus jolie:
String.prototype.embraceWith = function(tag) {
return "<" + tag + ">" + this + "</" + tag + ">";
};
var results = [
{type:"Fiat", model:500, color:"white"},
{type:"Mercedes", model: "Benz", color:"black"},
{type:"BMV", model: "X6", color:"black"}
];
var tableHeader = ("Type".embraceWith("th") + "Model".embraceWith("th") + "Color".embraceWith("th")).embraceWith("tr");
var tableBody = results.map(function(item) {
return (item.type.embraceWith("td") + item.model.toString().embraceWith("td") + item.color.embraceWith("td")).embraceWith("tr")
}).join("");
var table = (tableHeader + tableBody).embraceWith("table");
$("#result-holder").append(table);
J'ai écrit plutôt une bonne fonction qui peut générer des tableaux verticaux et horizontaux:
function generateTable(rowsData, titles, type, _class) {
var $table = $("<table>").addClass(_class);
var $tbody = $("<tbody>").appendTo($table);
if (type == 2) {//vertical table
if (rowsData.length !== titles.length) {
console.error('rows and data rows count doesent match');
return false;
}
titles.forEach(function (title, index) {
var $tr = $("<tr>");
$("<th>").html(title).appendTo($tr);
var rows = rowsData[index];
rows.forEach(function (html) {
$("<td>").html(html).appendTo($tr);
});
$tr.appendTo($tbody);
});
} else if (type == 1) {//horsantal table
var valid = true;
rowsData.forEach(function (row) {
if (!row) {
valid = false;
return;
}
if (row.length !== titles.length) {
valid = false;
return;
}
});
if (!valid) {
console.error('rows and data rows count doesent match');
return false;
}
var $tr = $("<tr>");
titles.forEach(function (title, index) {
$("<th>").html(title).appendTo($tr);
});
$tr.appendTo($tbody);
rowsData.forEach(function (row, index) {
var $tr = $("<tr>");
row.forEach(function (html) {
$("<td>").html(html).appendTo($tr);
});
$tr.appendTo($tbody);
});
}
return $table;
}
exemple d'utilisation:
var title = [
'مساحت موجود',
'مساحت باقیمانده',
'مساحت در طرح'
];
var rows = [
[number_format(data.source.area,2)],
[number_format(data.intersection.area,2)],
[number_format(data.deference.area,2)]
];
var $ft = generateTable(rows, title, 2,"table table-striped table-hover table-bordered");
$ft.appendTo( GroupAnalyse.$results );
var title = [
'جهت',
'اندازه قبلی',
'اندازه فعلی',
'وضعیت',
'میزان عقب نشینی',
];
var rows = data.edgesData.map(function (r) {
return [
r.directionText,
r.lineLength,
r.newLineLength,
r.stateText,
r.lineLengthDifference
];
});
var $et = generateTable(rows, title, 1,"table table-striped table-hover table-bordered");
$et.appendTo( GroupAnalyse.$results );
$('<hr/>').appendTo( GroupAnalyse.$results );
exemple de résultat:
Il est important de noter que vous pouvez utiliser Emmet pour obtenir le même résultat. Tout d’abord, vérifiez ce que Emmet peut faire pour vous sur https://emmet.io/
En un mot, avec Emmet, vous pouvez développer une chaîne en un balisage HTML complexe, comme indiqué dans les exemples ci-dessous:
Exemple 1
ul>li*5
... produira
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
Exemple n ° 2
div#header+div.page+div#footer.class1.class2.class3
... produira
<div id="header"></div>
<div class="page"></div>
<div id="footer" class="class1 class2 class3"></div>
Et la liste continue. Il y a plus d'exemples sur https://docs.emmet.io/abbreviations/syntax/
Et il existe une bibliothèque pour le faire en utilisant jQuery. Il s’appelle Emmet.js et est disponible sur https://github.com/christiansandor/Emmet.js
<table id="game_table" border="1">
et Jquery
var i;
for (i = 0; ii < 10; i++)
{
var tr = $("<tr></tr>")
var ii;
for (ii = 0; ii < 10; ii++)
{
tr.append(`<th>Firstname</th>`)
}
$('#game_table').append(tr)
}
c'est le mieux
html
<div id="here_table"> </div>
jQuery
$('#here_table').append( '<table>' );
for(i=0;i<3;i++)
{
$('#here_table').append( '<tr>' + 'result' + i + '</tr>' );
for(ii=0;ii<3;ii++)
{
$('#here_table').append( '<td>' + 'result' + i + '</tr>' );
}
}
$('#here_table').append( '</table>' );
Je préfère la méthode la plus lisible et la plus extensible avec jQuery.
En outre, vous pouvez créer du contenu entièrement dynamique à la volée.
Depuis jquery version 1.4, vous pouvez transmettre des attributs à des éléments, à savoir:
À mon humble avis, une caractéristique meurtrière . De plus, le code peut être gardé plus propre.
$(function(){
var tablerows = new Array();
$.each(['result1', 'result2', 'result3'], function( index, value ) {
tablerows.Push('<tr><td>' + value + '</td></tr>');
});
var table = $('<table/>', {
html: tablerows
});
var div = $('<div/>', {
id: 'here_table',
html: table
});
$('body').append(div);
});
Addon: en passant plus d’une balise "html", vous devez utiliser une notation de type tableau telle que: Par ex.
var div = $('<div/>', {
id: 'here_table',
html: [ div1, div2, table ]
});
meilleurs Rgds.
Franz