JQuery ile tablo oluştur - ekle


98

Sayfa div'de var:

<div id="here_table"></div>

ve jquery'de:

for(i=0;i<3;i++){
    $('#here_table').append( 'result' +  i );
}

bu benim için üretiyor:

<div id="here_table">
    result1 result2 result3 etc
</div>

Bunu tabloda almak istiyorum:

<div id="here_table">
    <table>
          <tr><td>result1</td></tr>
          <tr><td>result2</td></tr>
          <tr><td>result3</td></tr>
    </table>
</div>

Yapıyorum:

$('#here_table').append(  '<table>' );

 for(i=0;i<3;i++){
    $('#here_table').append( '<tr><td>' + 'result' +  i + '</td></tr>' );
}

 $('#here_table').append(  '</table>' );

ama bu benim için oluşturuyor:

<div id="here_table">
    <table> </table> !!!!!!!!!!
          <tr><td>result1</td></tr>
          <tr><td>result2</td></tr>
          <tr><td>result3</td></tr>
</div>

Neden? bunu nasıl doğru yapabilirim?

CANLI: http://jsfiddle.net/n7cyE/

Yanıtlar:


190

Bu hat:

$('#here_table').append( '<tr><td>' + 'result' +  i + '</td></tr>' );

İçin ekler div#here_tableyeni değil table.

Birkaç yaklaşım var:

/* 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);

Ancak, yukarıdaki yaklaşımla stil eklemek ve dinamik bir şekilde iş yapmak daha az yönetilebilir <table>.

Ama buna ne dersiniz, beklediğiniz şeyi neredeyse harika yapıyor:

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);

Umarım bu yardımcı olur.


4
ikinci örnek için, tr içinde bir td'ye ihtiyacınız var ve sonra td'de .text yapmalısınız. Ayrıca jquery ile html öğesi oluşturduğunuzda, yalnızca açılış etiketine ihtiyacınız vardır. $ ('<table>') harika çalışıyor.
m4tt1mus

Jquery örneği için, $('<table/>')yerine $('<table></table>)ve $('<tr/>')yerine $('<tr></tr>), vb. Gibi daha küçük etiket adları kullanabilirsiniz
phyatt

38

trİçini eklemeniz gerekiyor , tablebu yüzden seçicinizi döngünüzün içine güncelledim ve kapatmayı kaldırdım tableçünkü gerekli değil.

$('#here_table').append(  '<table />' );

 for(i=0;i<3;i++){
    $('#here_table table').append( '<tr><td>' + 'result' +  i + '</td></tr>' );
}

Ana sorun, burayı trburadaki divtabloya eklemenizdi.

Düzenleme: Performans önemliyse işte bir JavaScript sürümü. Belge parçasının kullanılması, döngünün her yinelemesinde yeniden akışa neden olmaz

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);

1
mükemmel cevap! Teşekkür ederim! JavaScript sürümünüzü App Inventor puravidaapps.com/table.php'de
Taifun

2
Düz metin geçmek için innerHTML kullanmamalısınız
Cela

20

Kullandığınızda append, jQuery bunun iyi biçimlendirilmiş HTML olmasını bekler (düz metin sayılır). appendyapmak gibi değil +=.

Önce tabloyu yapmalı, sonra eklemelisin.

var $table = $('<table/>');
for(var i=0; i<3; i++){
    $table.append( '<tr><td>' + 'result' +  i + '</td></tr>' );
}
$('#here_table').append($table);

4
+1 Buradaki en iyi yaklaşım - jQuery'nin ham HTML'de değil, DOM öğelerinde çalıştığını gösterir.
Tadeck

13

Veya TÜM jQuery'yi kullanmak için bu şekilde yapın. Her biri, ister DOM öğeleri ister bir dizi / nesne olsun herhangi bir veri arasında döngü oluşturabilir.

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));
});
​

http://jsfiddle.net/n7cyE/93/


Bunun jsFiddle dışında çalışması için gerekli olan belirli bir ayar var mı? Bunu boş bir js dosyasında denemek "Yakalanmamış TypeError: Tanımsız 'her biri' özelliği okunamıyor"
canadiancreed

4
JQuery'nin yüklendiğinden emin misiniz?
Henridv

Satırı HTML kullanmayacak şekilde değiştirir ve bunun yerine TEXT kullanırdım (çünkü bu örnekte tablo hücresine sadece metin ekliyoruz) tCell = $ ('<td>') .text (data [i]);
PerryCS

4

Birden çok sütun ve satır eklemek için, bir dize birleştirme de yapabiliriz. En iyi yol değil, ama kesinlikle işe yarıyor.

             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);

Bu ayrıca alan adlarını kodlamadan tabloya dinamik olarak satır ve sütun eklemenize olanak tanır.


3

İşte yapabilecekleriniz: 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>' );
}

Saygılarımla!


2

Jquery kullanılarak birden çok dosya yüklemesi için aşağıdakiler yapılır:

Dosya giriş düğmesi:

<div>
 <input type="file" name="uploadFiles" id="uploadFiles" multiple="multiple" class="input-xlarge" onchange="getFileSizeandName(this);"/> 
</div>

Bir tabloda Dosya adını ve Dosya boyutunu görüntüleme:

<div id="uploadMultipleFilediv">
<table id="uploadTable" class="table table-striped table-bordered table-condensed"></table></div>

Dosya adını ve dosya boyutunu almak için Javascript:

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");               
    }           
}

2

Veya bazı bağlantılar (veya her neyse) oluşturmak için döngü içermeyen statik HTML. Yerleştirin <div id="menu">HTML çoğaltmak için herhangi bir sayfada.

    <!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>

2

Dikey ve yatay tablolar oluşturabilen oldukça iyi bir işlev yazdım:

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;
}

kullanım örneği:

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 );

örnek sonuç:

örnek sonuç


1

Yukarıda belirtilen yöntemi kullanan ve verileri temsil etmek için JSON kullanan bir çalışma örneği. Bu, sunucudan veri getiren ajax çağrıları ile ilgilenme projemde kullanılıyor.

http://jsfiddle.net/vinocui/22mX6/1/

HTML'nizde: <table id = 'here_table'> </ table>

JS kodu:

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);
});

1

Bana gelince, bu yaklaşım daha güzel:

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);

0


jquery kullanarak en okunabilir ve genişletilebilir yolu tercih ediyorum.
Ayrıca, anında tamamen dinamik içerik oluşturabilirsiniz.
Jquery sürüm 1.4'ten beri, öznitelikleri
, katil bir özellik olan imho olan öğelere geçirebilirsiniz . Ayrıca kod daha temiz tutulabilir.

$(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);

    });

Eklenti: birden fazla "html" etiketini iletmek gibi dizi gösterimi kullanmanız gerekir: örn.

var div = $('<div/>', {
            id: 'here_table',
            html: [ div1, div2, table ]
        });

en iyi Rgds.
Franz


0
<table id="game_table" border="1">

ve 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)
}

Stackoverflow'a hoş geldiniz! Bu cevabı yazdığınız soru çok eskidir (6 yıl) ve şimdiden diğer kullanıcılar tarafından kapsamlı bir şekilde cevaplanmıştır. Yazar kutusunun üstünde bir sorunun yaşını görebilirsiniz. Belki de bugün müthiş bilginizi kullanarak devam eden cevapsız sorularla kullanıcıları desteklemek istiyorsunuz! Arama çubuğuna etiket adını yazarak en yeni soruları bulabilir ve sadece soruları cevaplamak istediğiniz teknolojiye ait soruları görürsünüz. JQuery için bu sayfayı burada bulabilirsiniz .
Herku

0

bu en iyisi

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>' );

0

Aynı sonucu elde etmek için Emmet'i kullanabileceğinizi unutmamak önemlidir. Öncelikle, https://emmet.io/ adresinden Emmet'in sizin için neler yapabileceğini kontrol edin.

Özetle, Emmet ile bir dizeyi aşağıdaki örneklerde gösterildiği gibi karmaşık bir HTML biçimlendirmesine genişletebilirsiniz:

Örnek 1

ul>li*5

... üretecek

<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>

Örnek 2

div#header+div.page+div#footer.class1.class2.class3

... üretecek

<div id="header"></div>
<div class="page"></div>
<div id="footer" class="class1 class2 class3"></div>

Ve liste devam ediyor. Https://docs.emmet.io/abbreviations/syntax/ adresinde daha fazla örnek var.

Ve bunu jQuery kullanarak yapmak için bir kütüphane var. Adı Emmet.js ve https://github.com/christiansandor/Emmet.js adresinde mevcuttur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.