JQuery के साथ तालिका बनाएँ - परिशिष्ट


97

मेरे पास पृष्ठ div पर है:

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

और jquery में:

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

यह मेरे लिए उत्पन्न कर रहा है:

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

मैं इसे तालिका में प्राप्त करना चाहूंगा:

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

मैं कर रहा हूँ:

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

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

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

लेकिन यह मेरे लिए उत्पन्न होता है:

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

क्यों? मैं इसे सही तरीके से कैसे बना सकता हूं?

LIVE: http://jsfiddle.net/n7cyE/

जवाबों:


189

यह रेखा:

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

div#here_tableनया नहीं करने की अपील करता है table

कई दृष्टिकोण हैं:

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

लेकिन, उपरोक्त दृष्टिकोण के साथ यह शैलियों को जोड़ने और गतिशील रूप से सामान करने के लिए कम प्रबंधनीय है <table>

लेकिन इस बारे में कैसे, यह वही करता है जो आप लगभग महान की उम्मीद करते हैं:

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

आशा है कि यह मदद करेगा।


4
दूसरे उदाहरण के लिए, आपको अपने tr के अंदर एक td की आवश्यकता है और फिर td पर .text करें। जब jquery के साथ html एलिमेंट बनाया जाता है तो आपको केवल शुरुआती टैग की आवश्यकता होती है। $ ('<table>') बढ़िया काम करता है।
m4tt1mus

Jquery उदाहरण के लिए, आप $('<table/>')इसके बजाय छोटे टैग नामों का उपयोग कर सकते हैं $('<table></table>), और $('<tr/>')इसके बजाय $('<tr></tr>), आदि
phyatt

37

आपको trअंदर से जोड़ने की जरूरत है tableइसलिए मैंने आपके चयनकर्ता को अपने लूप के अंदर अपडेट किया और समापन को हटा दिया tableक्योंकि यह आवश्यक नहीं है।

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

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

मुख्य समस्या यह थी कि आप here_table trपर divसंलग्न कर रहे थे ।

संपादित करें: यदि प्रदर्शन चिंता का विषय है, तो यहां जावास्क्रिप्ट संस्करण है। दस्तावेज़ के टुकड़े का उपयोग करने से लूप के प्रत्येक पुनरावृत्ति के लिए एक रिफ्लो नहीं होगा

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
बहुत बढ़िया जवाब! धन्यवाद! मैंने App Inventor puravidaapps.com/table.php
Taifun

2
सादा पाठ
cela

20

जब आप उपयोग करते हैं append, तो jQuery यह अच्छी तरह से गठित HTML (सादे पाठ की गिनती) होने की उम्मीद करता है। appendकरने जैसा नहीं है +=

आपको पहले तालिका बनाने की आवश्यकता है, फिर इसे संलग्न करें।

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

4
+1 सबसे अच्छा तरीका यहाँ - दिखाता है कि jQuery वास्तव में DOM तत्वों पर काम करता है, कच्चे HTML पर नहीं।
ताडेक

13

या यह सभी jQuery का उपयोग करने के लिए इस तरह से करते हैं। किसी भी डेटा के माध्यम से प्रत्येक पाश कर सकते हैं यह डोम तत्व या एक सरणी / वस्तु हो।

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/


वहाँ एक विशेष सेटिंग है कि यह jsFiddle के बाहर काम करने के लिए आवश्यक है? एक खाली जेएस फ़ाइल रिटर्न में यह कोशिश करना "अनियोजित टाइपर्रर: अपरिभाषित की 'प्रत्येक' संपत्ति नहीं पढ़ सकता है"
कैनेडियनक्रिड

4
क्या आपको यकीन है कि jQuery लोड है?
हेनरिड्व

मैं HTML का उपयोग नहीं करने के लिए लाइन को बदल दूंगा और इसके बजाय TEXT (चूंकि इस उदाहरण में हम केवल तालिका सेल में पाठ सम्मिलित कर रहे हैं) tCell = $ ('<td>') का उपयोग कर सकते हैं। पाठ (डेटा [i]);
पेरीसीएससी

4

कई स्तंभों और पंक्तियों को जोड़ने के लिए, हम एक स्ट्रिंग संयोजन भी कर सकते हैं। सबसे अच्छा तरीका नहीं है, लेकिन यह निश्चित रूप से काम करता है।

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

यह आपको फ़ील्डनामों को हार्ड किए बिना, गतिशील रूप से तालिका में पंक्तियों और स्तंभों को जोड़ने की अनुमति देता है।



2

निम्नलिखित कई फ़ाइल अपलोड के लिए jquery का उपयोग किया जाता है:

फ़ाइल इनपुट बटन:

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

तालिका में फ़ाइल नाम और फ़ाइल आकार प्रदर्शित करना:

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

फ़ाइल नाम और फ़ाइल आकार प्राप्त करने के लिए जावास्क्रिप्ट:

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

या कुछ लिंक (या जो भी) बनाने के लिए लूप के बिना स्थिर HTML। <div id="menu">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>

2

मैंने लिखा कि अच्छा कार्य जो ऊर्ध्वाधर और क्षैतिज तालिकाओं को उत्पन्न कर सकता है:

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

उपयोग उदाहरण:

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

उदाहरण परिणाम:

उदाहरण के परिणाम


1

डेटा का प्रतिनिधित्व करने के लिए ऊपर वर्णित विधि और JSON का उपयोग करके एक कार्य उदाहरण। यह ajax कॉल सर्वर से डेटा लाने के साथ काम करने की मेरी परियोजना में प्रयोग किया जाता है।

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

अपने HTML में: <table id = 'here_table'> </ table>

जेएस कोड:

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

मेरे लिए, यह दृष्टिकोण प्रीतिकर है:

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 का उपयोग करके सबसे पठनीय और एक्स्टेंसिबल तरीका पसंद करता हूं।
इसके अलावा, आप मक्खी पर पूरी तरह से गतिशील सामग्री का निर्माण कर सकते हैं।
Jquery संस्करण 1.4 के बाद से आप उन तत्वों के गुणों को पास कर सकते हैं जो कि,
imho, एक हत्यारा सुविधा है। साथ ही कोड को क्लीनर रखा जा सकता है।

$(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: एक से अधिक "html" टैग से गुजरना आपको सरणी संकेतन का उपयोग करना है जैसे: उदा

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

सबसे अच्छा आरजीडी।
फ्रांज


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

और 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 में आपका स्वागत है! आप जिस प्रश्न के लिए यह उत्तर लिख रहे हैं वह बहुत पुराना (6 वर्ष) है और पहले ही अन्य उपयोगकर्ताओं द्वारा बड़े पैमाने पर उत्तर दिया जा चुका है। आप लेखक बॉक्स के ऊपर एक प्रश्न की आयु देख सकते हैं। हो सकता है कि आप आज अपने भयानक ज्ञान का उपयोग करके चल रहे अनुत्तरित प्रश्नों के साथ उपयोगकर्ताओं का समर्थन करना चाहते हों! आप खोज नाम में टैग नाम लिखकर नवीनतम प्रश्न पा सकते हैं और आप केवल उसी तकनीक के प्रश्नों को देखेंगे जिसके लिए आप प्रश्नों का उत्तर देना चाहते हैं। JQuery के लिए आप इस पृष्ठ को यहाँ देख सकते हैं ।
हरकु

0

यह सबसे बेहतर है

एचटीएमएल

<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

यह ध्यान रखना महत्वपूर्ण है कि आप उसी परिणाम को प्राप्त करने के लिए एम्मेट का उपयोग कर सकते हैं। सबसे पहले, देखें कि Emmet आपके लिए https://emmet.io/ पर क्या कर सकता है

संक्षेप में, एम्मेट के साथ, आप एक स्ट्रिंग को एक जटिल HTML मार्कअप में विस्तारित कर सकते हैं जैसा कि नीचे दिए गए उदाहरणों में दिखाया गया है:

उदाहरण 1

ul>li*5

... उत्पादन करेंगे

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

उदाहरण # 2

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

... उत्पादन करेंगे

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

और सूची जारी होती है। Https://docs.emmet.io/abirectations/syntax/ पर अधिक उदाहरण हैं

और jQuery का उपयोग करने के लिए एक पुस्तकालय है। इसे Emmet.js कहा जाता है और यह https://github.com/christiansandor/Emmet.js पर उपलब्ध है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.