← Back to HTML Course | Chapter 8: Modern HTML & Components | Lesson 5 of 10

HTML टेम्पलेट टैग

सोचिए आपने स्टार के आकार का एक cookie cutter खरीदा। अपने आप में, यह cookie cutter बस आपकी किचन दराज में पड़ा एक टूल है। आप cookie cutter को खाते नहीं हैं। इसके बजाय, जब भी आप बेक करना चाहते हैं, आप इसका इस्तेमाल एक जैसे स्टार-आकार के कुकीज़ काटने के लिए करते हैं। HTML template टैग वही cookie cutter है। यह आपको HTML कोड का एक ब्लॉक (जैसे एक फॉर्मेटेड यूज़र रिव्यू कार्ड या टूल स्टेटस लिस्ट) डिफाइन करने देता है, जो पेज लोड होने पर पूरी तरह छिपा रहता है। जब भी आपको नया डेटा दिखाना हो, आप एक JavaScript स्क्रिप्ट लिखते हैं जो template को उठाती है, डिटेल्स भरती है, और उसे डायनामिक रूप से आपके पेज पर क्लोन कर देती है।
Syntax
markup
<template id="id">
  <!-- template content -->
</template>
<script>
  const clone = document.getElementById("id").content.cloneNode(true);
</script>

template एलिमेंट

template टैग HTML मार्कअप के एक ब्लॉक को परिभाषित करता है जो वेबपेज लोड होने पर निष्क्रिय (inert) और पूरी तरह छुपा हुआ रहता है। यह एक फिर से इस्तेमाल किए जाने योग्य टेम्पलेट कंटेनर की तरह काम करता है जिसे आप JavaScript का उपयोग करके डायनामिक रूप से कॉपी और इंस्टैंशिएट कर सकते हैं।

Note: ऐसे कॉम्प्लेक्स कंपोनेंट मार्कअप्स रखने के लिए template टैग का उपयोग करें जिन्हें आप डायनामिक रूप से क्लोन करना चाहते हैं।
Warning: पेज लोड होने पर ब्राउज़र template टैग्स के अंदर कोई इमेज डाउनलोड नहीं करेगा या कोई स्क्रिप्ट लोड नहीं करेगा, क्योंकि यह कंटेंट inert होता है।

उदाहरण: The template Element

markup
<template id="card-template">
  <p>Card content</p>
</template>

Template कंटेंट को क्लोन करना

अपने पेज पर template कंटेंट दिखाने के लिए, आप एक JavaScript स्क्रिप्ट लिखते हैं जो template की ID कैप्चर करती है, उसके content को एक्सेस करती है, cloneNode(true) का उपयोग करके उसका नोड स्ट्रक्चर क्लोन करती है, और उसे अपने पेज लेआउट में जोड़ देती है।

Note: cloneNode में true आर्ग्युमेंट पास करने से यह पक्का होता है कि ब्राउज़र एलिमेंट का पूरा नेस्टेड चाइल्ड ट्री कॉपी करे।
Warning: अगर आप template कंटेंट को सही तरीके से clone नहीं करते, तो गलती से ओरिजिनल template nodes को मूव कर सकते हैं, जिससे वे भविष्य में इस्तेमाल के लिए उपलब्ध नहीं रहेंगे।

उदाहरण: Cloning Template Content

markup
<template id="card-template">
  <p>Card content</p>
</template>
<script>
  const clone = document.getElementById('card-template').content.cloneNode(true);
  document.body.appendChild(clone);
</script>

Templates में डेटा इंजेक्ट करना

एक बार जब आप template कंटेंट क्लोन कर लेते हैं, तो आप अपने पेज लेआउट में क्लोन जोड़ने से पहले उसके अंदर के एलिमेंट्स (जैसे heading या paragraph टैग्स) को अपनी स्क्रिप्ट्स में आसानी से टार्गेट करके कस्टम डेटा वैल्यूज़ इंजेक्ट कर सकते हैं।

Note: अपनी डेटा इंजेक्शन को साफ-सुथरा रखने के लिए अपने क्लोन किए गए fragments के अंदर के एलिमेंट्स को टार्गेट करने के लिए querySelector का उपयोग करें।
Warning: वैल्यूज़ अपडेट करते समय हमेशा clone किए गए fragment को टारगेट करें, ओरिजिनल template node को सीधे टारगेट न करें।

उदाहरण: Injecting Data into Templates

markup
<template id="card-template">
  <p class="name"></p>
</template>
<script>
  const clone = document.getElementById('card-template').content.cloneNode(true);
  clone.querySelector('.name').textContent = 'Alex';
  document.body.appendChild(clone);
</script>

template के परफॉर्मेंस फायदे

template एलिमेंट के आने से पहले, डेवलपर्स को लंबे, धीमे JavaScript लूप्स के अंदर मैनुअली एलिमेंट्स बनाकर या innerHTML स्ट्रिंग्स का उपयोग करके डायनामिक लेआउट्स बनाने पड़ते थे, जिससे ब्राउज़र्स को अपना लेआउट फिर से बनाना पड़ता था और पेज परफॉर्मेंस धीमी हो जाती थी।

Templates को ब्राउज़र एक बार पार्स करता है, जिससे इन्हें क्लोन करना बेहद तेज़ और कारगर होता है।

Note: अपनी वेबसाइट की परफॉर्मेंस और लोडिंग स्पीड सुधारने के लिए innerHTML स्ट्रिंग्स के बजाय template टैग्स का उपयोग करें।
Warning: भारी loops के अंदर innerHTML स्ट्रिंग्स का ज़्यादा इस्तेमाल करने से मोबाइल डिवाइसेस पर layout-thrashing परफॉर्मेंस समस्या हो सकती है।

उदाहरण: Performance Benefits of template

markup
<template id="row-template">
  <li></li>
</template>
<script>
  for (let i = 0; i < 100; i++) {
    document.body.appendChild(document.getElementById('row-template').content.cloneNode(true));
  }
</script>

कंडीशनल लेआउट टॉगल्स

आप template टैग्स का उपयोग पूरे लेआउट सेक्शन्स (जैसे इंटरैक्टिव modal forms, warning notices, या tool panels) स्टोर करने के लिए कर सकते हैं जिन्हें आप सिर्फ तभी लोड करना चाहते हैं जब यूज़र कोई बटन क्लिक करे या कोई एक्शन ट्रिगर करे।

Note: कॉम्प्लेक्स, सेकंडरी लेआउट कंपोनेंट्स को ज़रूरत पड़ने तक छुपा कर रखने के लिए template टैग्स का उपयोग करें।
Warning: चूंकि template का कंटेंट inert होता है, यह डिफॉल्ट पेज DOM में नहीं दिखता, जिससे यह क्लोन होने तक सर्च crawlers के लिए एक्सेस के लायक नहीं होता।

उदाहरण: Conditional Layout Toggles

markup
<template id="modal-template">
  <div class="modal">Warning notice</div>
</template>
<button onclick="document.body.appendChild(document.getElementById('modal-template').content.cloneNode(true))">
  Show Warning
</button>
Live Example
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. template code लिखना और cloning के बिना उसके page load पर display होने की उम्मीद करना।
  2. standard document.getElementById से template contents को target करने की कोशिश करना, जो null return करेगा।
  3. अपने cloned fragments को target करने के बजाय सीधे original template node में values update करना।
चैप्टर सारांश
  • template tag HTML markup का एक inert block define करता है जो page load पर hidden रहता है।
  • अपने scripts में template ID capture करें और उसकी structure clone करने के लिए content.cloneNode(true) इस्तेमाल करें।
  • अपनी site को fast और optimized रखने के लिए अपने cloned fragments को अपने webpage layout में append करने से पहले उनमें custom data inject करें।
ब्राउज़र सपोर्ट

standard HTML5 template elements सभी modern web browsers द्वारा natively supported हैं।

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.