एक HTML फ़ाइल में एक और HTML फ़ाइल शामिल करें


624

मेरे पास 2 HTML फाइलें हैं, मान लीजिए a.htmlऔर b.html। में a.htmlशामिल करना चाहता हूं b.html

जेएसएफ में मैं इसे इस तरह कर सकता हूं:

<ui:include src="b.xhtml" />

इसका मतलब है कि a.xhtmlफ़ाइल के अंदर , मैं शामिल कर सकता हूं b.xhtml

हम इसे *.htmlफ़ाइल में कैसे कर सकते हैं ?



32
नहीं! इसकी 2 अलग बातें!
लोलो

संबंधित, लेकिन इसके लिए localhost: stackoverflow.com/questions/7542872/…
cregox

<object type = "text / html" data = "b.xhtml"> </ object>
MarMarAba

जवाबों:


685

मेरी राय में सबसे अच्छा समाधान jQuery का उपयोग करता है:

a.html:

<html> 
  <head> 
    <script src="jquery.js"></script> 
    <script> 
    $(function(){
      $("#includedContent").load("b.html"); 
    });
    </script> 
  </head> 

  <body> 
     <div id="includedContent"></div>
  </body> 
</html>

b.html:

<p>This is my include file</p>

यह विधि मेरी समस्या का एक सरल और साफ समाधान है।

JQuery .load()प्रलेखन यहाँ है


5
यह करने का अंतर क्या है?
रॉड्रिगो रुइज़

10
$(function(){})दस्तावेज़ को लोड करने के बाद ही @RodrigoRuiz निष्पादित होगा।
प्रोफेक

8
यदि शामिल HTML फ़ाइल में CSS संलग्न है, तो यह आपकी पृष्ठ शैली को गड़बड़ कर सकता है।
बजे उमर जाफोर

6
मैं ठीक वैसा ही हूं जैसा आपने उल्लेख किया है। मैं बूटस्ट्रैप का उपयोग कर रहा हूं और B.html के लिए css ओवरराइट कर रहा हूं। जब मैं ए। Html में बी। कॉम का उपयोग करता हूं ताकि यह ए। एचटीएमएल के हेडर के रूप में समाप्त हो जाए, तो मैं देख सकता हूं कि सीएसएस ने अपनी प्राथमिकता खो दी है और एक अलग लेआउट है। इसका कोई समाधान?
पवन दित्तकवी

36
इसके लिए सर्वर की आवश्यकता होती है । एक स्थानीय फ़ाइल पर इसका उपयोग करते समय:XMLHttpRequest cannot load file:///.../b.html. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
बसज 12

154

ऊपर से लोलो के उत्तर का विस्तार करते हुए, यहां थोड़ी अधिक स्वचालन है यदि आपको बहुत सारी फाइलें शामिल करनी हैं:

<script>
  $(function(){
    var includes = $('[data-include]');
    jQuery.each(includes, function(){
      var file = 'views/' + $(this).data('include') + '.html';
      $(this).load(file);
    });
  });
</script>

और फिर html में कुछ शामिल करने के लिए:

<div data-include="header"></div>
<div data-include="footer"></div>

जिसमें फ़ाइल दृश्य / शीर्ष लेख। Html और दृश्य / पाद लेख शामिल होंगे


बहुत उपयोगी। क्या किसी अन्य डेटा पैरामीटर के माध्यम से एक तर्क को पारित करने का एक तरीका है, जैसे data-argumentकि शामिल फ़ाइल में इसे पुनर्प्राप्त और पुनः प्राप्त करना?
क्रिस

@chris आप GET params का उपयोग कर सकते हैं जैसे$("#postdiv").load('posts.php?name=Test&age=25');
Nam G VU

5
छोटे सुझाव - आपको जरूरत नहीं है class="include"- बस अपने jQuery के चयनकर्ता को var includes = $('[data-include]');
बनाएं

स्थानीय फ़ाइलों के साथ क्रोम पर काम नहीं करना "क्रॉस मूल अनुरोध केवल प्रोटोकॉल योजनाओं के लिए समर्थित हैं: कार्य"
आर्टेम बर्नत्स्की

2
@ArtemBernatskyi क्या यह मदद करता है, जब आप इसके बजाय एक स्थानीय सर्वर चलाते हैं? यहाँ एक आसान ट्यूटोरियल है: developer.mozilla.org/en-US/docs/Learn/Common_questions/…
mhanisch

145

मेरा समाधान ऊपर लोलो के समान है । हालाँकि, मैं jQuery का उपयोग करने के बजाय जावास्क्रिप्ट के दस्तावेज़ के माध्यम से HTML कोड सम्मिलित करता हूं:

a.html:

<html> 
  <body>
  <h1>Put your HTML content before insertion of b.js.</h1>
      ...

  <script src="b.js"></script>

      ...

  <p>And whatever content you want afterwards.</p>
  </body>
</html>

b.js:

document.write('\
\
    <h1>Add your HTML code here</h1>\
\
     <p>Notice however, that you have to escape LF's with a '\', just like\
        demonstrated in this code listing.\
    </p>\
\
');

JQuery का उपयोग करने के खिलाफ मेरे लिए कारण यह है कि jQuery.js आकार में ~ 90kb है, और मैं डेटा की मात्रा को यथासंभव छोटा रखना चाहता हूं।

बहुत काम के बिना ठीक से बची हुई जावास्क्रिप्ट फ़ाइल प्राप्त करने के लिए, आप निम्न sed कमांड का उपयोग कर सकते हैं:

sed 's/\\/\\\\/g;s/^.*$/&\\/g;s/'\''/\\'\''/g' b.html > escapedB.html

या सिर्फ गिथब पर गिस्ट के रूप में प्रकाशित निम्नलिखित आसान बैश स्क्रिप्ट का उपयोग करें, जो कि सभी आवश्यक कार्य को स्वचालित करता है, जिसमें परिवर्तित b.htmlहोता है b.js: https://gist.github.com/Tafkadasoh/334881e18cb7fb2a5c033bfa03f6ee6ee6

ग्रेग मिनशाल को क्रेडिट की गई सुधरी हुई कमांड के लिए श्रेय जो वापस स्लैश और सिंगल कोट्स से बच जाता है, जिसे मेरी मूल सेड कमांड ने नहीं माना था।

वैकल्पिक रूप से उन ब्राउज़र के लिए जो टेम्पलेट शाब्दिक का समर्थन करते हैं , निम्नलिखित भी काम करते हैं:

b.js:

document.write(`

    <h1>Add your HTML code here</h1>

     <p>Notice, you do not have to escape LF's with a '\',
        like demonstrated in the above code listing.
    </p>

`);

4
@TrevorHickey हां, आप सही कह रहे हैं, यह मेरे समाधान का दोष है, और यह बहुत सुरुचिपूर्ण नहीं है। हालाँकि, जैसा कि आप प्रत्येक पंक्ति के अंत में एक साधारण रेगेक्स के साथ एक '\' डाल सकते हैं, यह मेरे लिए सबसे अच्छा काम करता है। हम्म ... शायद मुझे अपने जवाब में जोड़ना चाहिए कि
रेन्ग्ज़ के

2
हे शीश, यह बदसूरत है - कोई धन्यवाद नहीं। मैं बल्कि html के रूप में अपने HTML लिखना होगा। मुझे परवाह नहीं है अगर मैं कमांड लाइन पर sed का उपयोग कर सकता हूं - मैं नहीं चाहता कि हर बार मुझे उस टेम्पलेट पर सामग्री बदलनी पड़े।
jbyrd

1
@Goodra इसमें बिना किसी HTML के काम करना चाहिए '। यदि आप सिर्फ एक खोज करते हैं / रिप्लेस करने के लिए ` with \ `फिर से खोजें / को बदलने 'के लिए \'और नई-लाइनों के साथ बदलने के लिए` `नई-लाइनों के साथ यह ठीक काम करेगा।
wizzwizz4

1
@ wizzwizz4: ग्रेग की बदौलत सेड कमांड अब सिंगल कोट्स और बैकस्लैश से भी बच जाता है। इसके अलावा, मैंने एक बैश स्क्रिप्ट जोड़ी है जो आपके लिए सभी काम करती है। :-)
तफकादासोह

1
आप backticks का उपयोग कर सकते हैं `- फिर आप भाव डालने में सक्षम हैं ${var}- जैसे कि आपको केवल भागने की जरूरत है \`और\$
inetphantom

85

Html5rocks ट्यूटोरियल और बहुलक-परियोजना के माध्यम से चेकआउट एचटीएमएल 5 आयात

उदाहरण के लिए:

<head>
  <link rel="import" href="/path/to/imports/stuff.html">
</head>

27
HTML आयात वास्तव में पृष्ठ में सामग्री को सीधे शामिल करने के लिए नहीं हैं। इस उत्तर में कोड केवल मूल पृष्ठ के भीतर एक टेम्पलेट के रूप मेंstuff.html उपलब्ध है , लेकिन आपको मूल पृष्ठ में इसके DOM के क्लोन बनाने के लिए स्क्रिप्टिंग का उपयोग करना होगा ताकि वे उपयोगकर्ता को दिखाई दें।

1
HTML5rocks.com पर एक HTML पेज की सामग्री को दूसरे में डालने के निर्देश अभी तक बहुत सारे ब्राउज़रों में काम नहीं करते हैं। मैंने इसे ओपेरा 12.16 और सुपरबर्ड वर्जन 32.0.1700.7 (233448) में बिना किसी प्रभाव के (ज़ुबांट 20.04 पर) आज़माया। मैंने सुना है कि यह फ़ायरफ़ॉक्स में काम नहीं करता है (एक बग के कारण जो उम्मीद से तय किया गया है) या क्रोम के बहुत सारे संस्करण हैं, हालांकि। इसलिए, जबकि ऐसा लगता है कि यह भविष्य में एक आदर्श समाधान हो सकता है, यह क्रॉस-ब्राउज़र समाधान नहीं है।
ब्रूट्सफोरोज़थ्रैक्स

1
फायरफॉक्स (45.5.1 ESR) में अंत में 2016 के रूप में स्पष्ट रूप से तैयार नहीं है। जेएस कंसोल कहते हैं TypeError: ... .import is undefined:। एमडीएन का कहना है कि "यह सुविधा इस समय किसी भी ब्राउज़र में लागू नहीं की गई है।" किसी को पता है कि क्या इस सुविधा के साथ एफएफ का निर्माण संभव है?
sphakka

3
फ़ायरफ़ॉक्स इसका समर्थन नहीं करेगा। इसे सक्षम करने के लिए "dom.webcompenders.enabled" सेट करने का प्रयास करें। यह केवल क्रोम और ओपेरा, एंड्रॉइड में अपडेट करने योग्य वेब दृश्य (4.4.3 से शुरू) के साथ काम करेगा। Apple ब्राउज़र इसका समर्थन नहीं करते हैं। यह वेब-घटकों के लिए एक अच्छा विचार है, लेकिन अभी तक व्यापक रूप से लागू नहीं हुआ है।
मैक्सिम

9
अपडेट देर से २०१ HTML: एचटीएमएल आयात स्पष्ट रूप से किसी कारण से
वंचित हो रहे हैं

60

एक पुस्तकालय का बेशर्म प्लग जिसे मैंने इसे हल किया था।

https://github.com/LexmarkWeb/csi.js

<div data-include="/path/to/include.html"></div>

उपरोक्त सामग्री ले जाएगा /path/to/include.htmlऔर इसके divसाथ बदल देगा।


4
क्या यह जावास्क्रिप्ट का मूल्यांकन करेगा यदि इसे शामिल किया गया है।
सेठ

1
@ ऐसा नहीं लगता। मैं src के साथ खेलने जा रहा हूं और देखूंगा कि क्या मैं ऐसा कर सकता हूं। माइकल-
मार

2
प्रतिभाशाली!!!! तुम्हारा ही एकमात्र समाधान लगता है कि जहां डालने के लिए एक टोकन के रूप में इस्तेमाल किया दिव्य टैग REPLACES। मैं बाद में स्रोत का ध्यानपूर्वक अध्ययन करने जा रहा हूँ !! :-)
जूल

1
इस काम के लिए धन्यवाद, इसमें HTML / CSS शामिल हैं, लेकिन स्रोत फ़ाइलों से जावास्क्रिप्ट नहीं। आपको जहां भी उपयोग करना है, आपको इसे फिर से शामिल करना होगा <div data-include="/path/to/include.html"></div>। यह उपकरण एक सरल नो-प्लग को एक स्वच्छ तरीके से मॉकअप बनाना आसान बनाता है।
विन्सेन्ट तांग

1
क्या मैं किसी भी एप्लिकेशन में इस काम का उपयोग कर सकता हूं? मेरा मतलब है कि लेखक को कैसे श्रेय दिया जा सकता है? W3School समान समाधान, फर्क सिर्फ इतना है है यह है कि पुनरावर्ती साथ ही खिड़की लोड पर कॉल .... करने के लिए अपने कोड पूरा करता w3schools.com/howto/tryit.asp?filename=tryhow_html_include_1
yeppe

43

एक साधारण सर्वर साइड में एक ही फ़ोल्डर में मिली एक अन्य फ़ाइल को शामिल करने का निर्देश शामिल होता है:

<!--#include virtual="a.html" --> 

21
आपको SSI
lolo

7
यहाँ आपके सर्वर के लिए SSI को कॉन्फ़िगर करने के लिए एक संदर्भ है: httpd.apache.org/docs/2.4/howto/ssi.html#configuring
shasi kanth

<!--#include file="a.html" -->साथ ही साथ कोशिश करने लायक हो सकता है
jimmyjudas

SSI समावेशन वेब-सर्वर को एक थोडा धीमा बनाता है (ताकि पूर्ण आवश्यकता तक इसे टाला जाए)।
अमित वर्मा

36

स्क्रिप्ट की कोई जरूरत नहीं। किसी भी फैंसी सामान सर्वर-साइड (संभवतः बेहतर विकल्प होगा) करने की आवश्यकता नहीं है

<iframe src="/path/to/file.html" seamless></iframe>

चूंकि पुराने ब्राउज़र सहज समर्थन नहीं करते हैं, इसलिए आपको इसे ठीक करने के लिए कुछ सीएसएस जोड़ना चाहिए:

iframe[seamless] {
    border: none;
}

ध्यान रखें कि उन ब्राउज़र के लिए जो निर्बाध रूप से समर्थन नहीं करते हैं, यदि आप iframe में एक लिंक पर क्लिक करते हैं तो यह फ्रेम को उस यूआरएल पर जाएगा, न कि पूरी विंडो को। एक तरह से चारों ओर पाने के लिए सभी लिंक है target="_parent", ब्राउज़र समर्थन "पर्याप्त पर्याप्त" है।


7
यह उदाहरण के लिए मूल पृष्ठ से सीएसएस शैलियों को लागू नहीं करता है।
रैंडी

5
@ रंडी तो? इसे एक प्लस (विशेष रूप से उपयोगकर्ता-निर्मित सामग्री और पसंद के लिए) के रूप में गिना जा सकता है। वैसे भी कैशिंग की वजह से आप एक और अनुरोध किए बिना आसानी से सीएसएस फ़ाइलों को फिर से शामिल कर सकते हैं।
bjb568

इस सवाल के जवाब के लिए मेरी ज़रूरतों का जवाब दिया - एचटीएमएल फाइल को एक और एचटीएमएल फाइल में कैसे शामिल किया जाए ...
ग्रिमैक्स

2
यह JQuery या स्क्रिप्ट के बिना सबसे अच्छा जवाब है। अच्छा bjb568 धन्यवाद!
DBS

12
यह seamlessविशेषता HTML ड्राफ्ट से निकाली गई है जिसे यह कहा गया है । इसका उपयोग न करें।
मित्जा

33

एक बहुत पुराना समाधान जो मुझे अपनी जरूरतों को पूरा करने के लिए वापस मिला, लेकिन यहाँ यह मानक-अनुरूप कोड कैसे करना है:

<!--[if IE]>
<object classid="clsid:25336920-03F9-11CF-8FD0-00AA00686F13" data="some.html">
<p>backup content</p>
</object>
<![endif]-->

<!--[if !IE]> <-->
<object type="text/html" data="some.html">
<p>backup content</p>
</object>
<!--> <![endif]-->

9
ऐसा प्रतीत होता है कि <object>, <embed>और <iframe>सभी इसके लिए काम करते हैं, लेकिन सभी तीन मामलों में वे अपने स्टाइल और स्क्रिप्टिंग संदर्भों के साथ अलग-अलग दस्तावेज़ बनाते हैं (iframe में विशेष रूप से बदसूरत सीमाएं और स्क्रॉलबार शामिल हैं), और उदाहरण के लिए डिफ़ॉल्ट रूप से किसी भी लिंक को उनके भीतर से खोलें। मूल पृष्ठ (हालांकि यह लक्ष्य = "_ माता-पिता" के साथ ओवरराइड किया जा सकता है)। इन सब से, आइफ्रेम केवल एक और एचटीएमएल 5 के माध्यम से एकीकृत हो की कुछ उम्मीद है कि seamlessविशेषता (bjb568 ने उल्लेख किया), लेकिन यह अभी तक अच्छी तरह से समर्थित नहीं है: caniuse.com/#feat=iframe-seamless
waldyrious

2
iframe-सहज को HTML मानक से हटा दिया गया है: github.com/whatwg/html/issues/331 । तो @waldyrious टिप्पणी अब सही नहीं है (इसे अपनी टिप्पणी अपडेट करने के लिए मन?)
Tomáš Pospíšek

1
हेड-अप, @ TomášPospíšek के लिए धन्यवाद। मैं अपनी टिप्पणी अब संपादित नहीं कर सकता, लेकिन उम्मीद है कि आपकी प्रतिक्रिया पाठकों को आवश्यक चेतावनी प्रदान करती है। स्पष्ट होने के लिए, अंतिम वाक्य ( seamlessविशेषता के बारे में ) एकमात्र पुराना हिस्सा है - बाकी अभी भी लागू होता है।
वाल्डिएरियस

17

एक विकल्प के रूप में, यदि आपके पास अपने सर्वर पर .htaccess फ़ाइल तक पहुंच है, तो आप एक साधारण निर्देश जोड़ सकते हैं जो php को .html एक्सटेंशन में समाप्त होने वाली फ़ाइलों पर व्याख्या करने की अनुमति देगा।

RemoveHandler .html
AddType application/x-httpd-php .php .html

अब आप अन्य फ़ाइलों को शामिल करने के लिए एक साधारण php स्क्रिप्ट का उपयोग कर सकते हैं जैसे:

<?php include('b.html'); ?>

28
हाँ यह एक बहुत बुरी सलाह है। Html फ़ाइलें स्थिर हैं, और बहुत तेजी से अपाचे द्वारा कार्य किया जाता है। यदि आप phl पार्सर में सभी html फ़ाइलों को सिर्फ inlcude फाइलों में जोड़ते हैं, तो आपको अपने सर्वर पर प्रदर्शन समस्याओं का बहुत सामना करना पड़ेगा। जावास्क्रिप्ट तरीका (jQuery या सादे JS) बहुत अच्छे समाधान नहीं हैं, लेकिन वे अभी भी इस तरह से अधिक कुशल और कम खतरनाक हैं।
Gfra54

@ Gfra54 क्या आपका मतलब है कि अगर हम अपाचे का उपयोग केवल इसके लिए करते हैं, तो हमारे पास प्रदर्शन के मुद्दे होंगे, और हम साइट के लिए कोई php काम नहीं करते हैं? या अगर मैं php और इस चीज़ को एक साथ उपयोग करूं तो क्या यह धीमा हो जाएगा?
user3459110

1
सावधानी: करने के लिए इन पंक्तियों को जोड़ने .htaccessमई कारण htmlपृष्ठों फ़ाइलों के रूप में डाउनलोड करने के बजाय ब्राउज़र में देखने के लिए प्रयास करने के लिए। पहले परीक्षण करें। डिस्क्लेमर: यह अभी मेरे साथ हुआ जब मैंने उपरोक्त समाधान की कोशिश की। .htaccessऊपर की दो पंक्तियों को छोड़कर मेरा स्थान खाली था। सावधानी की सलाह दी। loloइसके बजाय jQuery समाधान (नीचे) का प्रयास करें ।
cssyphus

आदमी मैं अपने आप को जटिल कर रहा था, हालांकि मैंने इसे पहले भी किया है। याद दिलाने के लिए शुक्रिया। जिस उद्देश्य के लिए मुझे इसकी आवश्यकता है वह वास्तव में प्रदर्शन को प्रभावित नहीं करता है इसलिए मैं शांत हूं।
गमन

हा यह प्रदर्शन-कुचल जवाब बाहर की सोच का एक भयानक उदाहरण है। मैं इसका सुझाव कभी नहीं दूंगा, लेकिन हो सकता है कि एक लाइफसेवर जब आपको पीएचपी स्लेजहेमर की त्वरित आवश्यकता होती है। :-)
मूडबोम

14

निम्न कार्यों के बाद अगर कुछ फ़ाइल से HTML सामग्री को शामिल करने की आवश्यकता होती है: उदाहरण के लिए, निम्न पंक्ति में उस स्थान पर piece_to_include.html की सामग्री शामिल होगी जहाँ OBJECT परिभाषा होती है।

...text before...
<OBJECT data="file_to_include.html">
Warning: file_to_include.html could not be included.
</OBJECT>
...text after...

संदर्भ: http://www.w3.org/TR/WD-html40-970708/struct/includes.html#h-7.7.4


2
एक आकर्षण की तरह काम करता है और यह सबसे साफ समाधान है। यह स्वीकृत उत्तर होना चाहिए।
vbocan

इस बात से सहमत। सिर्फ एक नोट: एक स्व-समापन ऑब्जेक्ट टैग करने की कोशिश न करें। इसके बाद का पाठ मिट जाएगा।
श्रीधर सरनोबत

यह एक नया "#document" बनाने के लिए लगता है जिसमें स्वचालित रूप से नया, नेस्टेड <html> और <body> टैग शामिल हैं। यह मेरे उद्देश्य के लिए काम नहीं किया; मेरी .html फ़ाइल में <script src = "..." प्रकार = "पाठ / जावास्क्रिप्ट"> टैग हैं; लेकिन जेएस को नई संदर्भ त्रुटियां मिलीं।
IAM_AL_X

12

यहाँ मेरा समाधान है:

(() => {
    const includes = document.getElementsByTagName('include');
    [].forEach.call(includes, i => {
        let filePath = i.getAttribute('src');
        fetch(filePath).then(file => {
            file.text().then(content => {
                i.insertAdjacentHTML('afterend', content);
                i.remove();
            });
        });
    });
})();
<p>FOO</p>

<include src="a.html">Loading...</include>

<p>BAR</p>

<include src="b.html">Loading...</include>

<p>TEE</p>


1
वाह, यह अधिक सरल है
एरियन सपुतरा

वास्तव में अच्छा और सरल समाधान, धन्यवाद ^ ^
17

11

W3.js में इस तरह के काम शामिल हैं:

<body>
<div w3-include-HTML="h1.html"></div>
<div w3-include-HTML="content.html"></div>
<script>w3.includeHTML();</script>
</body>

उचित विवरण के लिए इसे देखें: https://www.w3schools.com/howto/howto_html_include.asp


यदि आप जानना चाहते हैं कि दस्तावेज़ कब लोड किया गया है, तो आप इसे दस्तावेज़ के अंत में रख सकते हैं: <img src = "thisimagedoesnotexistinosy" onerror = 'initDocument ()' style = 'display: none;'> चालाक चाल , एह?
काज रिसबर्ग

2
गूगल क्रोम के साथ काम नहीं कर रहा है।
गहरा

9

इससे मुझे मदद मिली। से html कोड का एक ब्लॉक जोड़ने के लिएb.html लिए a.html, इस के headटैग में जाना चाहिए a.html:

<script src="https://code.jquery.com/jquery-1.10.2.js"></script>

फिर बॉडी टैग में, एक कंटेनर को लोड करने के लिए एक अनोखी आईडी और एक जावास्क्रिप्ट ब्लॉक के साथ बनाया जाता है b.html के साथ कंटेनर में जाता है, इस प्रकार है:

<div id="b-placeholder">

</div>

<script>
$(function(){
  $("#b-placeholder").load("b.html");
});
</script>

5
यह प्रश्न इस प्रश्न के स्वीकृत उत्तर से कैसे भिन्न है?
मोहम्मद उस्मान

1
@MohammadUsman यहां कंटेनर और जावास्क्रिप्ट कोड बॉडी टैग में निहित हैं, जबकि स्वीकृत उत्तर उन्हें हेड टैग में रखता है और कंटेनर को केवल बॉडी टैग में छोड़ देता है।
रामतिन

यह एक नए जवाब के लायक नहीं है ... यह एक टिप्पणी है
केनेस्ट सेलेस्टे

8

मुझे पता है कि यह बहुत पुरानी पोस्ट है, इसलिए कुछ तरीके वापस उपलब्ध नहीं थे। लेकिन यहाँ इस पर मेरी बहुत सरल है (लोलो के जवाब के आधार पर)।

यह HTML5 डेटा पर निर्भर करता है- * विशेषताएँ और इसलिए इसमें बहुत सामान्य है कि प्रत्येक को पाने के लिए jQuery के प्रत्येक का उपयोग करता है। "लोड-html" से मेल खाते हुए और सामग्री को लोड करने के लिए अपने संबंधित 'डेटा-स्रोत' विशेषता का उपयोग करता है:

<div class="container-fluid">
    <div class="load-html" id="NavigationMenu" data-source="header.html"></div>
    <div class="load-html" id="MainBody" data-source="body.html"></div>
    <div class="load-html" id="Footer" data-source="footer.html"></div>
</div>
<script src="js/jquery.min.js"></script>
<script>
$(function () {
    $(".load-html").each(function () {
        $(this).load(this.dataset.source);
    });
});
</script>

7

आप HTML आयात ( https://www.html5rocks.com/en/tutorials/webcompenders/imports/ ), या उस सरल समाधान https://github.com/dsheiko/html-import का उपयोग कर सकते हैं

उदाहरण के लिए, उस पृष्ठ पर जैसे आप HTML ब्लॉक आयात करते हैं:

<link rel="html-import" href="./some-path/block.html" >

ब्लॉक का अपना आयात हो सकता है:

<link rel="html-import" href="./some-other-path/other-block.html" >

आयातक एसएसआई की तरह लोड किए गए एचटीएमएल के साथ निर्देश की जगह लेता है

जैसे ही आप इस छोटे से जावास्क्रिप्ट को लोड करेंगे, ये निर्देश स्वचालित रूप से दिए जाएंगे:

<script async src="./src/html-import.js"></script>

जब डोम स्वचालित रूप से तैयार हो जाएगा तो यह आयातों को संसाधित करेगा। इसके अलावा, यह एक एपीआई को उजागर करता है जिसका उपयोग आप मैन्युअल रूप से चलाने के लिए कर सकते हैं, लॉग और इतने पर। का आनंद लें :)


Html फ़ाइल में स्क्रिप्ट लाइन कहाँ जाना चाहिए?
एंड्रयू ट्रकले

BODY के भीतर कहीं भी। शामिल फ़ाइलों की सामग्री में पुनरावर्ती रूप से रखा जा सकता है
दिमित्री शिकोओ

क्या आपने यह परीक्षण किया?
भिक्खु सुभूति

निश्चित रूप से मैंने किया। मैं वास्तव में वर्षों से इसका उपयोग कर रहा हूं। क्यों पूछ रहे है? काई समस्या?
दिमित्री शिकोओ

तो यह करने के लिए "कुंजी" script async srcऐसा लगता है। यह कोशिश कर रहा है!
javadba

6

अधिकांश समाधान काम करते हैं लेकिन उनके पास jquery के साथ समस्या है :

समस्या कोड $(document).ready(function () { alert($("#includedContent").text()); }अलर्ट के बाद शामिल सामग्री के बजाय कुछ भी चेतावनी नहीं है।

मैं नीचे दिए गए कोड को लिखता हूं, मेरे समाधान में आप $(document).readyफ़ंक्शन में शामिल सामग्री तक पहुंच सकते हैं :

(कुंजी लोड हो रही है सामग्री समकालिक रूप से शामिल है)।

index.htm :

<html>
    <head>
        <script src="jquery.js"></script>

        <script>
            (function ($) {
                $.include = function (url) {
                    $.ajax({
                        url: url,
                        async: false,
                        success: function (result) {
                            document.write(result);
                        }
                    });
                };
            }(jQuery));
        </script>

        <script>
            $(document).ready(function () {
                alert($("#test").text());
            });
        </script>
    </head>

    <body>
        <script>$.include("include.inc");</script>
    </body>

</html>

.in.inc :

<div id="test">
    There is no issue between this solution and jquery.
</div>

jquery में github पर प्लगइन शामिल है


इसका उपयोग करते समय और फिर ब्राउज़र से पृष्ठ स्रोत को देखने पर आप केवल स्क्रिप्ट देखते हैं। क्या यह आपकी साइट को पार्स करने की किसी खोज इंजन की क्षमता को प्रभावित नहीं करता है, अंततः किसी एसईओ प्रयासों को नष्ट कर देता है?
hmcclungiii 14

हां, यह विधि किसी भी एसईओ को नष्ट कर देती है :)
अमीर सनिअन

फिर, हर जावास्क्रिप्ट-आधारित विधि ऐसा करती है।
wizzwizz4


4

अथिरा का जवाब (पहला!) बहुत ज्यादा निर्णायक था! बहुत अच्छा!

लेकिन अगर आप पृष्ठ का नाम URL पैरामीटर के रूप में शामिल करना चाहते हैं , तो इस पोस्ट का उपयोग करने के लिए एक बहुत अच्छा समाधान है:

http://www.jquerybyexample.net/2012/06/get-url-parameters-using-jquery.html

तो यह कुछ इस तरह हो जाता है:

आपका URL:

www.yoursite.com/a.html?p=b.html

A.html कोड अब हो जाता है:

<html> 
  <head> 
    <script src="jquery.js"></script> 
    <script> 
    function GetURLParameter(sParam)
    {
      var sPageURL = window.location.search.substring(1);
      var sURLVariables = sPageURL.split('&');
      for (var i = 0; i < sURLVariables.length; i++) 
      {
        var sParameterName = sURLVariables[i].split('=');
        if (sParameterName[0] == sParam) 
        {
            return sParameterName[1];
        }
      }
    }​
    $(function(){
      var pinc = GetURLParameter('p');
      $("#includedContent").load(pinc); 
    });
    </script> 
  </head> 

  <body> 
     <div id="includedContent"></div>
  </body> 
</html>

यह मेरे लिए बहुत अच्छा काम किया! मुझे आशा है कि मदद की है :)


सुरक्षा समस्या, आप किसी को यह लिंक भेज सकते हैं, www.yoursite.com/a.html?p=htttp://www.linktovir.us/here.html
JoostS

4

html5rocks.com के पास इस सामान पर एक बहुत अच्छा ट्यूटोरियल है, और इसमें थोड़ी देर हो सकती है, लेकिन मुझे खुद नहीं पता था कि यह अस्तित्व में है। w3schools के पास w3.js. नामक अपनी नई लाइब्रेरी का उपयोग करने का एक तरीका भी है बात यह है, यह एक वेब सर्वर और HTTPRequest ऑब्जेक्ट के उपयोग की आवश्यकता है। आप वास्तव में इन स्थानीय रूप से लोड नहीं कर सकते हैं और उन्हें अपने मशीन पर परीक्षण कर सकते हैं। हालांकि आप क्या कर सकते हैं, शीर्ष पर html5rocks लिंक पर दिए गए पॉलीफ़िल का उपयोग करें, या उनके ट्यूटोरियल का पालन करें। थोड़ा जेएस जादू के साथ, आप ऐसा कुछ कर सकते हैं:

 var link = document.createElement('link');
 if('import' in link){
     //Run import code
     link.setAttribute('rel','import');
     link.setAttribute('href',importPath);
     document.getElementsByTagName('head')[0].appendChild(link);
     //Create a phantom element to append the import document text to
     link = document.querySelector('link[rel="import"]');
     var docText = document.createElement('div');
     docText.innerHTML = link.import;
     element.appendChild(docText.cloneNode(true));
 } else {
     //Imports aren't supported, so call polyfill
     importPolyfill(importPath);
 }

यह लिंक बना देगा (यदि पहले से सेट हो तो वांछित लिंक तत्व बदल सकता है), आयात सेट करें (जब तक कि आपके पास पहले से ही न हो), और फिर इसे संलग्न करें। यह तब वहां से ले जाएगा और HTML में फ़ाइल को पार्स कर देगा, और फिर इसे एक div के तहत वांछित तत्व में जोड़ देगा। यह सब आपकी आवश्यकताओं को जोड़ने वाले तत्व से आपके द्वारा उपयोग किए जा रहे लिंक तक फिट करने के लिए बदला जा सकता है। मुझे उम्मीद है कि इससे मदद मिली, यह अब अप्रासंगिक हो सकता है अगर पुस्तकालयों और चौखटों जैसे jQuery या W3.js. का उपयोग किए बिना नए, तेज तरीके निकल आए हैं।

अद्यतन: यह यह कहते हुए एक त्रुटि फेंक देगा कि स्थानीय आयात को CORS नीति द्वारा अवरुद्ध कर दिया गया है। गहरी वेब के गुणों के कारण इसका उपयोग करने में सक्षम होने के लिए गहरी वेब तक पहुंच की आवश्यकता हो सकती है। (मतलब कोई व्यावहारिक उपयोग नहीं)


4

यहाँ Fetch API और async फ़ंक्शन का उपयोग करके मेरा दृष्टिकोण है

<div class="js-component" data-name="header" data-ext="html"></div>
<div class="js-component" data-name="footer" data-ext="html"></div>

<script>
    const components = document.querySelectorAll('.js-component')

    const loadComponent = async c => {
        const { name, ext } = c.dataset
        const response = await fetch(`${name}.${ext}`)
        const html = await response.text()
        c.innerHTML = html
    }

    [...components].forEach(loadComponent)
</script>

3

अब कार्य के लिए कोई सीधा HTML समाधान नहीं है। यहां तक ​​कि HTML आयात (जो स्थायी रूप से ड्राफ्ट में है ) बात नहीं करेगा, क्योंकि आयात! = शामिल करें और वैसे भी कुछ जेएस जादू की आवश्यकता होगी।
मैंने हाल ही में एक वनिलाज स्क्रिप्ट लिखी है जो HTML को HTML में शामिल करने के लिए है, बिना किसी जटिलता के।

बस अपने में जगह है a.html

<link data-wi-src="b.html" />
<!-- ... and somewhere below is ref to the script ... -->
<script src="wm-html-include.js"> </script>  

यह है open-sourceऔर एक विचार दे सकता है (मुझे आशा है)


3

आप जावास्क्रिप्ट की लाइब्रेरी jQuery के साथ ऐसा कर सकते हैं:

HTML:

<div class="banner" title="banner.html"></div>

जे एस:

$(".banner").each(function(){
    var inc=$(this);
    $.get(inc.attr("title"), function(data){
        inc.replaceWith(data);
    });
});

कृपया ध्यान दें कि banner.htmlउसी डोमेन के तहत स्थित होना चाहिए जो आपके अन्य पृष्ठ हैं अन्यथा आपके वेबपेज क्रॉस-ऑरिजिन रिसोर्सिंग केbanner.html कारण फ़ाइल को मना कर देंगे नीतियों के ।

इसके अलावा, कृपया ध्यान दें कि यदि आप अपनी सामग्री को जावास्क्रिप्ट के साथ लोड करते हैं, तो Google इसे अनुक्रमित नहीं कर पाएगा, इसलिए यह एसईओ कारणों के लिए एक अच्छा तरीका नहीं है।


2

क्या आपने आईफ्रेम इंजेक्शन की कोशिश की?

यह दस्तावेज़ में iFrame को इंजेक्ट करता है और स्वयं को हटा देता है (यह HTML डोम में माना जाता है)

<iframe src="header.html" onload="this.before((this.contentDocument.body||this.contentDocument).children[0]);this.remove()"></iframe>

सादर


1

मैं इस विषय पर कुछ इसी तरह की तलाश में आया था, लेकिन लोलो द्वारा उत्पन्न समस्या से थोड़ा अलग था। मैं अन्य पृष्ठों के लिंक का एक वर्णमाला मेनू पकड़े हुए HTML पृष्ठ का निर्माण करना चाहता था, और प्रत्येक अन्य पृष्ठ मौजूद हो सकते हैं या नहीं भी हो सकते हैं, और जिस क्रम में वे बनाए गए थे वह वर्णमाला नहीं हो सकता है (और यहां तक ​​कि संख्यात्मक भी नहीं)। इसके अलावा, तफकदासोह की तरह, मैं वेब पेज को jQuery के साथ ब्लोट नहीं करना चाहता था। समस्या पर शोध करने और कई घंटों तक प्रयोग करने के बाद, यहाँ मेरे लिए काम किया गया है, प्रासंगिक टिप्पणियों के साथ:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/application/html; charset=iso-8859-1">
  <meta name="Author" content="me">
  <meta copyright="Copyright" content= "(C) 2013-present by me" />
  <title>Menu</title>

<script type="text/javascript">
<!--
var F000, F001, F002, F003, F004, F005, F006, F007, F008, F009,
    F010, F011, F012, F013, F014, F015, F016, F017, F018, F019;
var dat = new Array();
var form, script, write, str, tmp, dtno, indx, unde;

/*
The "F000" and similar variables need to exist/be-declared.
Each one will be associated with a different menu item,
so decide on how many items maximum you are likely to need,
when constructing that listing of them.  Here, there are 20.
*/


function initialize()
{ window.name="Menu";
  form = document.getElementById('MENU');
  for(indx=0; indx<20; indx++)
  { str = "00" + indx;
    tmp = str.length - 3;
    str = str.substr(tmp);
    script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = str + ".js";
    form.appendChild(script);
  }

/*
The for() loop constructs some <script> objects
and associates each one with a different simple file name,
starting with "000.js" and, here, going up to "019.js".
It won't matter which of those files exist or not.
However, for each menu item you want to display on this
page, you will need to ensure that its .js file does exist.

The short function below (inside HTML comment-block) is,
generically, what the content of each one of the .js files looks like:
<!--
function F000()
{ return ["Menu Item Name", "./URLofFile.htm", "Description string"];
}
-->

(Continuing the remarks in the main menu.htm file)
It happens that each call of the form.appendChild() function
will cause the specified .js script-file to be loaded at that time.
However, it takes a bit of time for the JavaScript in the file
to be fully integrated into the web page, so one thing that I tried,
but it didn't work, was to write an "onload" event handler.
The handler was apparently being called before the just-loaded
JavaScript had actually become accessible.

Note that the name of the function in the .js file is the same as one
of the the pre-defined variables like "F000".  When I tried to access
that function without declaring the variable, attempting to use an
"onload" event handler, the JavaScript debugger claimed that the item
was "not available".  This is not something that can be tested-for!
However, "undefined" IS something that CAN be tested-for.  Simply
declaring them to exist automatically makes all of them "undefined".
When the system finishes integrating a just-loaded .js script file,
the appropriate variable, like "F000", will become something other
than "undefined".  Thus it doesn't matter which .js files exist or
not, because we can simply test all the "F000"-type variables, and
ignore the ones that are "undefined".  More on that later.

The line below specifies a delay of 2 seconds, before any attempt
is made to access the scripts that were loaded.  That DOES give the
system enough time to fully integrate them into the web page.
(If you have a really long list of menu items, or expect the page
to be loaded by an old/slow computer, a longer delay may be needed.)
*/

  window.setTimeout("BuildMenu();", 2000);
  return;
}


//So here is the function that gets called after the 2-second delay  
function BuildMenu()
{ dtno = 0;    //index-counter for the "dat" array
  for(indx=0; indx<20; indx++)
  { str = "00" + indx;
    tmp = str.length - 3;
    str = "F" + str.substr(tmp);
    tmp = eval(str);
    if(tmp != unde) // "unde" is deliberately undefined, for this test
      dat[dtno++] = eval(str + "()");
  }

/*
The loop above simply tests each one of the "F000"-type variables, to
see if it is "undefined" or not.  Any actually-defined variable holds
a short function (from the ".js" script-file as previously indicated).
We call the function to get some data for one menu item, and put that
data into an array named "dat".

Below, the array is sorted alphabetically (the default), and the
"dtno" variable lets us know exactly how many menu items we will
be working with.  The loop that follows creates some "<span>" tags,
and the the "innerHTML" property of each one is set to become an
"anchor" or "<a>" tag, for a link to some other web page.  A description
and a "<br />" tag gets included for each link.  Finally, each new
<span> object is appended to the menu-page's "form" object, and thereby
ends up being inserted into the middle of the overall text on the page.
(For finer control of where you want to put text in a page, consider
placing something like this in the web page at an appropriate place,
as preparation:
<div id="InsertHere"></div>
You could then use document.getElementById("InsertHere") to get it into
a variable, for appending of <span> elements, the way a variable named
"form" was used in this example menu page.

Note: You don't have to specify the link in the same way I did
(the type of link specified here only works if JavaScript is enabled).
You are free to use the more-standard "<a>" tag with the "href"
property defined, if you wish.  But whichever way you go,
you need to make sure that any pages being linked actually exist!
*/

  dat.sort();
  for(indx=0; indx<dtno; indx++)
  { write = document.createElement('span');
    write.innerHTML = "<a onclick=\"window.open('" + dat[indx][1] +
                      "', 'Menu');\" style=\"color:#0000ff;" + 
                      "text-decoration:underline;cursor:pointer;\">" +
                      dat[indx][0] + "</a> " + dat[indx][2] + "<br />";
    form.appendChild(write);
  }
  return;
}

// -->
</script>
</head>

<body onload="initialize();" style="background-color:#a0a0a0; color:#000000; 

font-family:sans-serif; font-size:11pt;">
<h2>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MENU
<noscript><br /><span style="color:#ff0000;">
Links here only work if<br />
your browser's JavaScript<br />
support is enabled.</span><br /></noscript></h2>
These are the menu items you currently have available:<br />
<br />
<form id="MENU" action="" onsubmit="return false;">
<!-- Yes, the <form> object starts out completely empty -->
</form>
Click any link, and enjoy it as much as you like.<br />
Then use your browser's BACK button to return to this Menu,<br />
so you can click a different link for a different thing.<br />
<br />
<br />
<small>This file (web page) Copyright (c) 2013-present by me</small>
</body>
</html>

1

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

<head>
   <link rel="import" href="warnings.html">
</head>

आप Google पॉलिमर भी आज़मा सकते हैं


6
"बस एक पंक्ति में किसी भी HTML फ़ाइलों को आयात करने के लिए नीचे दिए गए कोड का उपयोग करें" बहुत असंगत है। फिर आपको किसी जेएस को आपके द्वारा आयात की गई किसी भी सामग्री का उपयोग करने के लिए लिखना होगा, इसलिए यह "एक लाइन" से अधिक होने का रास्ता बनाता है।
Skybondsor

1

ES6 backticks का उपयोग ``: टेम्पलेट शाब्दिक !

let nick = "Castor", name = "Moon", nuts = 1

more.innerHTML = `

<h1>Hello ${nick} ${name}!</h1>

You collected ${nuts} nuts so far!

<hr>

Double it and get ${nuts + nuts} nuts!!

` 
<div id="more"></div>

इस तरह हम html को एन्कोडिंग उद्धरण के बिना शामिल कर सकते हैं, DOM से वेरिएबल्स को शामिल कर सकते हैं, और इसी तरह।

यह एक शक्तिशाली टेंपलेटिंग इंजन है, हम अलग-अलग js फ़ाइलों का उपयोग कर सकते हैं और घटनाओं का उपयोग करके सामग्री को जगह में लोड कर सकते हैं, या यहां तक ​​कि सब कुछ अलग कर सकते हैं और मांग पर कॉल कर सकते हैं:

let inject = document.createElement('script');
inject.src= '//....com/template/panel45.js';
more.appendChild(inject);

https://caniuse.com/#feat=template-literals


1
अच्छा उदाहरण - कोई उत्थान (अब तक) क्यों नहीं?
javadba

अरे, आप सही कह रहे हैं, 2018 में ऊपर एक वास्तविक अच्छे आरटीएफएम का स्पष्ट संकेत था;) तब तक मैं उस javascriptबैज को शौकीन प्रोग्रामर के रूप में देखता था।
एनवीआरएम

1

समाधान प्राप्त करने के लिए आपको फ़ाइल csi.min.js को शामिल करना होगा, जिसे आप यहाँ देख सकते हैं

GitHub पर दिखाए गए उदाहरण के अनुसार, इस लाइब्रेरी का उपयोग करने के लिए आपको फ़ाइल csi.js को अपने पृष्ठ शीर्षलेख में शामिल करना होगा, फिर आपको उस डेटा को शामिल करने की आवश्यकता है जिसमें इसके मान को उस फ़ाइल में सेट करना है जिसे आप कंटेनर में शामिल करना चाहते हैं। तत्व।

कॉपी कोड छिपाएँ

<html>
  <head>
    <script src="csi.js"></script>
  </head>
  <body>
    <div data-include="Test.html"></div>
  </body>
</html>

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


0

PHP एक सर्वर लेवल स्क्रिप्टिंग लैंग्वेज है। यह कई चीजें कर सकता है, लेकिन एक लोकप्रिय उपयोग आपके पृष्ठों के अंदर HTML दस्तावेजों को शामिल करना है, एसएसआई के समान ही। एसएसआई की तरह, यह एक सर्वर स्तर की तकनीक है। यदि आप सुनिश्चित नहीं हैं कि आपकी वेबसाइट पर PHP कार्यक्षमता है, तो अपने होस्टिंग प्रदाता से संपर्क करें।

यहाँ एक सरल PHP स्क्रिप्ट है जिसका उपयोग आप किसी भी PHP- सक्षम वेब पेज पर HTML का एक स्निपेट शामिल करने के लिए कर सकते हैं:

फ़ाइलों को अलग करने के लिए अपनी साइट के सामान्य तत्वों के लिए HTML को सहेजें। उदाहरण के लिए, आपके नेविगेशन अनुभाग को नेविगेशन.html या नेविगेशन.php के रूप में सहेजा जा सकता है। प्रत्येक पृष्ठ में उस HTML को शामिल करने के लिए निम्न PHP कोड का उपयोग करें।

<?php require($DOCUMENT_ROOT . "navigation.php"); ?>

हर पृष्ठ पर उस कोड का उपयोग करें जिसे आप फ़ाइल में शामिल करना चाहते हैं। हिगिलेटेड फ़ाइल नाम को नाम और पथ को अपनी फ़ाइल में बदलना सुनिश्चित करें।


0

यदि आप django / bootle जैसे कुछ ढांचे का उपयोग करते हैं, तो वे अक्सर कुछ टेम्पलेट इंजन को शिप करते हैं। मान लें कि आप बोतल का उपयोग करते हैं, और डिफ़ॉल्ट टेम्पलेट इंजन SimpleTemplate इंजन है । और नीचे शुद्ध HTML फ़ाइल है

$ cat footer.tpl
<hr> <footer>   <p>&copy; stackoverflow, inc 2015</p> </footer>

आप मुख्य फाइल में footer.tpl को शामिल कर सकते हैं, जैसे:

$ cat dashboard.tpl
%include footer

इसके अलावा, आप अपने डैशबार्डर.प्लप में पैरामीटर भी पास कर सकते हैं।


0

Https://stackoverflow.com/a/31837264/4360308 के उत्तर के आधार पर मैंने इस कार्यक्षमता को Nodejs (+ एक्सप्रेस + चीयरियो) के साथ इस प्रकार लागू किया है:

HTML (index.html)

<div class="include" data-include="componentX" data-method="append"></div>
<div class="include" data-include="componentX" data-method="replace"></div>

जे एस

function includeComponents($) {
    $('.include').each(function () {
        var file = 'view/html/component/' + $(this).data('include') + '.html';
        var dataComp = fs.readFileSync(file);
        var htmlComp = dataComp.toString();
        if ($(this).data('method') == "replace") {
            $(this).replaceWith(htmlComp);
        } else if ($(this).data('method') == "append") {
            $(this).append(htmlComp);
        }
    })
}

function foo(){
    fs.readFile('./view/html/index.html', function (err, data) {
        if (err) throw err;
        var html = data.toString();
        var $ = cheerio.load(html);
        includeComponents($);
        ...
    }
}

परिशिष्ट -> div में सामग्री शामिल है

प्रतिस्थापित -> div को प्रतिस्थापित करता है

आप आसानी से एक ही डिजाइन के बाद अधिक व्यवहार जोड़ सकते हैं

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