Artikel ini meneroka mencipta jadual dinamik menggunakan Alpine JS, rangka kerja JavaScript yang ringan. Kami akan membahagikan proses kepada tiga bahagian: pengepala, kandungan dan pengaki, memfokuskan pada kedua-dua senario asas dan kompleks.
Kod awal adalah di bawah:
<div x-data="data"> </div> <script> let data = { } </script>
<thead class="sticky top-0 z-10 text-gray-700 bg-gray-50 dark:bg-gray-700 dark:text-gray-400"> <template x-for="row in table.customHeader"> <tr> <template x-for="col in row"> <th class="px-4 font-semibold text-left border-b py-1.5" x-init="col.attr && Object.keys(col.attr).forEach(e => $el.setAttribute(e, col.attr[e]))"> <div class="flex items-center justify-center"> <span x-html="col.title" class="whitespace-nowrap"></span> </div> </th> </template> </tr> </template> </thead>
let data = { table: { customHeader: [ [ { title: 'City', attr: { rowspan: 2 }, class: 'border-r border-t' }, { title: 'Clothes', attr: { colspan: 3 }, class: 'border-r border-t' }, { title: 'Accessories', attr: { colspan: 2 }, class: 'border-t' } ], [ { title: 'Trousers', class: 'border-r' }, { title: 'Skirts', class: 'border-r' }, { title: 'Dresses', class: 'border-r' }, { title: 'Bracelets', class: 'border-r' }, { title: 'Rings' }, ] ], } }
<tbody> <template x-for="(row, idx) in table.data"> <tr class="border-b dark:border-gray-700"> <template x-for="(col, icol) in row.columns"> <td x-bind:class="{ [col.class]: !!col.class }" class="px-3 border-b border-gray-200"> <div x-text="col.text"></div> </td> </template> </tr> </template> </tbody>
Dan ini ialah data yang ingin kami tunjukkan:
data: [ { "city": "Mandalay", "trousers": 79, "skirts": 16, "dresses": 14, "bracelets": 69, "rings": 99 }, { "city": "George Town", "trousers": 68, "skirts": 24, "dresses": 90, "bracelets": 96, "rings": 48 }, { "city": "Gent", "trousers": 26, "skirts": 60, "dresses": 67, "bracelets": 5, "rings": 43 }, { "city": "Mombasa", "trousers": 34, "skirts": 62, "dresses": 18, "bracelets": 75, "rings": 78 }, { "city": "Lyon", "trousers": 13, "skirts": 33, "dresses": 12, "bracelets": 0, "rings": 17 }, { "city": "Vancouver", "trousers": 82, "skirts": 91, "dresses": 18, "bracelets": 96, "rings": 72 }, { "city": "Cairn", "trousers": 64, "skirts": 43, "dresses": 14, "bracelets": 95, "rings": 55 }, ]
<tfoot class="sticky bg-gray-100 -bottom-1"> <template x-for="row in table.customFooter"> <tr> <template x-for="col in row"> <td class="px-3 border-b border-gray-200" x-init="col.attr && Object.keys(col.attr).forEach(e => $el.setAttribute(e, col.attr[e]))"> <div x-html="table.footerData[col.name)"> </div> </td> </template> </tr> </template> </tfoot>
customFooter: [ [ { value: 'Total', class: 'font-bold border-r text-center', attr: { rowspan: 2 } }, { name: 'total-trousers', class: 'text-right border-r' }, { name: 'total-skirts', class: 'text-right border-r', }, { name: 'total-dresses', class: 'text-right border-r' }, { name: 'total-bracelets', class: 'text-right border-r' }, { name: 'total-rings', class: 'text-right' }, ], [ { name: 'total-clothes', class: 'text-center border-r', attr: { colspan: 3 } }, { name: 'total-accessories', class: 'text-center', attr: { colspan: 2 } }, ], ],
Kami menunjukkan kefungsian jadual dengan data sampel yang mengandungi nama bandar dan pelbagai item pakaian.
Pecahan ini mempamerkan cara Alpine JS memperkasakan kami untuk mencipta jadual dinamik dengan pengepala, badan dan pengaki yang fleksibel. Pendekatan ini memudahkan penciptaan dan pengurusan jadual, terutamanya untuk senario dengan data yang kerap berubah.
Atas ialah kandungan terperinci Penciptaan Jadual Dinamik dengan Alpine JS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!