- HTMLTableElement API बहुत पहले से मौजूद है, लेकिन यह HTML table को मैनेज करने वाला built-in interface है जिसका इस्तेमाल बहुत कम होता है
- इस API की मदद से tbody, thead, tfoot, caption, row, cell आदि को सीधे बनाया और access किया जा सकता है, और बदलाव होने पर पूरी table को दोबारा render करने की ज़रूरत नहीं पड़ती
- उदाहरण code में दिखाया गया है कि nested array data को table में कैसे बदला जाए, और
insertRow() तथा insertCell() के जरिए row और cell कैसे जोड़े जाएँ
t.rows[1].cells[1] की तरह index से cell access करना, या insertRow(-1) से आखिरी row जोड़ना जैसी कई तरह की manipulation संभव हैं
- लेखक का कहना है कि इस API में data structure के रूप में table की capabilities बढ़ाने की संभावना है, और form की तरह इसमें events या अतिरिक्त features जोड़े जा सकते हैं
HTML table API का अवलोकन
- ज़्यादातर developers DOM methods (
createElement आदि) या innerHTML string insertion से table बनाते हैं, लेकिन दूसरा तरीका security risk रखता है
- HTML में पुराना HTMLTableElement API मौजूद है, जिसके जरिए table के body, row, cell, header, footer, caption, summary आदि को संभाला जा सकता है
- यह API पूरी table को दोबारा render किए बिना individual elements को manipulate कर सकता है
Code example: array से table बनाना
- उदाहरण में नीचे दिए गए nested array को table में बदला गया है
[['one','two','three'], ['four','five','six']]
document.createElement('table') से table बनाई जाती है, और हर row (insertRow) व cell (insertCell) को loop के जरिए जोड़ा जाता है
- हर cell की value
innerText से सेट की जाती है
Cell access और modification
- बनी हुई table के cells को index-based access से पाया जा सकता है
- उदाहरण:
t.rows[1].cells[1] → <td>five</td>
- row और cell को delete या नया add भी किया जा सकता है
- उदाहरण:
t.insertRow(-1) से आखिर में row जोड़ना
t.rows[2].insertCell(0) से नया cell बनाकर innerText = 'foo' से value सेट करना
API की सीमाएँ
insertRow(-1) जैसी कम intuitive index rules मौजूद हैं
- TH element को सीधे बनाने का कोई तरीका नहीं है, सभी cells TD की तरह handle होते हैं
आगे विस्तार की संभावना
- लेखक बताता है कि table बनाना अभी भी झंझट भरा है, इसलिए इस API की फिर से समीक्षा करके features बढ़ाने की ज़रूरत है
- जैसे HTML form में formData या change event जोड़े गए, वैसे ही table में भी events या advanced features लाए जा सकते हैं
- इससे table को सिर्फ़ layout tool नहीं बल्कि data structure के रूप में भी स्थान मिल सकता है
2 टिप्पणियां
तुलनात्मक रूप से कम अनुभव वाले डेवलपर के रूप में, मुझे यह देखकर हैरानी होती है कि कोई लेख शुरू से इस्तेमाल की जा रही API को मानो अभी-अभी "खोज" लिया हो, ऐसे पेश करता है।
Hacker News टिप्पणियाँ
लगता है बहुत से लोगों ने लेख को ठीक से नहीं पढ़ा इस लेख का मुख्य बिंदु `` टैग खुद नहीं, बल्कि table-विशेष DOM interface है उदाहरण के लिए
HTMLTableElement.prototype.insertRow()याHTMLTableRowElement.prototype.insertCell()जैसी methods,createElement()याappendChild()से ज़्यादा intuitive हैं लेकिन React, Svelte, Vue जैसी library-आधारित UI में अब ऐसी methods लगभग इस्तेमाल नहीं होतीं HTML syntax की तरहthead,tbody,tfootको छोड़ा जाए तब भी उनका अपने-आप handle हो जाना दिलचस्प है मैंने पिछले 5 साल में demo scripts में.insertRow,.insertCell,.createTHead,.rows,.cellsको सीधे इस्तेमाल किया है code style के हिसाब से मुझेforEachकी जगहforइस्तेमाल करना और index argument को छोड़ देना ज़्यादा साफ़ लगता हैकरीब आधा साल पहले MDN docs देखकर या AI की recommendation पर मैंने यह API इस्तेमाल किया था
rowsऔरcellsproperties keyboard navigation implement करने में बहुत सुविधाजनक थीं इससे जुड़ा example ClickHouse code में देखा जा सकता हैयह buttons पर हुई चर्चा(पिछला thread) जैसा ही संदर्भ है करीब 10~15 साल पहले से सब कुछ `` में बदलने लगा, और semantic markup की जगह HTML को UI toolbox की तरह इस्तेमाल किया जाने लगा
को पसंद करने लगते हैं सच कहूँ तोऔर `` को अलग-अलग रखना भी मुझे design mistake लगता हैStable Diffusion image comparison tool बनाते समय मैंने यह API इस्तेमाल की थी rows और columns बहुत ज़्यादा थे, इसलिए table को बार-बार recreate करना पड़ता था, लेकिन string से एक बार में बनाने की तुलना में DOM updates धीमे थे शायद इसलिए कि हर API call तुरंत DOM को update कर देती है
इसमें कहा गया था, “पूरी table को फिर से render करने की ज़रूरत नहीं पड़ती”, लेकिन असल में standard DOM methods भी पहले से ऐसे ही काम करती हैं फिर भी उबाऊ DOM traversal कम हो जाता है, यह काफ़ी बढ़िया बात है
HTML form API को भी फिर से rediscover करने की ज़रूरत है
table की समस्या data भरने में नहीं, बल्कि search·sorting·filtering features का बिल्कुल न होना है
“यह API abandon हो गई” वाली बात समझ नहीं आती मैं आज भी HTML tables बनाते समय इसे अक्सर इस्तेमाल करता हूँ
example code दिलचस्प है, लेकिन variable names को बहुत छोटा कर देने से readability गिर जाती है
b,t,r,cकी जगह meaningful names इस्तेमाल करना बेहतर है(ri, i)जैसी index mixing ज़्यादा उलझाती है मिलती-जुलती भूमिका वाले variables की length भी एक जैसी रखना बेहतर हैlet b = document.body;जैसी line पढ़ना खास तौर पर मुश्किल है कुछ bytes बचाने के चक्कर में सिर्फ cognitive load बढ़ता है