एक से अधिक html पृष्ठों में शामिल होने के लिए हेडर और फुटर फाइलें बनाएं


140

मैं सामान्य हेडर और फुटर पेज बनाना चाहता हूं जो कई html पेज पर शामिल हैं।

मैं जावास्क्रिप्ट का उपयोग करना चाहूंगा। वहाँ केवल HTML और जावास्क्रिप्ट का उपयोग कर ऐसा करने के लिए एक रास्ता है?

मैं एक और html पेज के भीतर हेडर और फुटर पेज लोड करना चाहता हूं।


1
आप ajax की तलाश कर रहे हैं ... $ ('। MyElement) .load (' urltopage.html '); यह urltopage.html की सामग्री को .myElement में लोड करेगा
Salketer

जवाबों:


192

आप इसे jquery के साथ पूरा कर सकते हैं ।

इस कोड को रखें index.html

<html>
<head>
<title></title>
<script
    src="https://code.jquery.com/jquery-3.3.1.js"
    integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
    crossorigin="anonymous">
</script>
<script> 
$(function(){
  $("#header").load("header.html"); 
  $("#footer").load("footer.html"); 
});
</script> 
</head>
<body>
<div id="header"></div>
<!--Remaining section-->
<div id="footer"></div>
</body>
</html>

और में इस कोड डाल header.htmlऔर footer.htmlरूप में एक ही स्थान पर,index.html

<a href="http://www.google.com">click here for google</a>

अब, जब आप यात्रा करते हैं, तो आपको index.htmlलिंक टैग पर क्लिक करने में सक्षम होना चाहिए।


हाँ। सभी पेज में ये पेज संरचना होनी चाहिए
हरिप्रसाद प्रोलेंक्स

19
लोड या अन्य फ़ंक्शन जो local fileGoogle Chrome या IE के नए संस्करण में आयात या उपयोग नहीं करते हैं, कारण: सुरक्षा!
18

7
कभी-कभी मुझे आश्चर्य होता है कि लोग jQuery के बिना भी कैसे सांस ले सकते हैं। या वहाँ एक .breathe(in)और .breathe(out)पहले से ही है? कोई भी स्क्रिप्टिंग भाषा यहां शुद्ध ओवरकिल है।
षड़यंत्र

6
मैं बार आ रही है Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.जब मैं क्रोम में चलाने
digiwebguy

1
सर्वर में कोड को चलाना आवश्यक है। जिसका मतलब है कि url को "http: // ....." जैसा होना चाहिए।
देशभक्त

37

मैं हेडर और पाद लेख के रूप में सर्वर साइड शामिल करके सामान्य भागों को जोड़ता हूं । कोई HTML और कोई JavaScript आवश्यक नहीं है। इसके बजाय, वेबसर्वर कुछ भी करने से पहले शामिल कोड को स्वचालित रूप से जोड़ता है।

बस निम्नलिखित पंक्ति जोड़ें जहाँ आप अपनी फ़ाइल को शामिल करना चाहते हैं:

<!--#include file="include_head.html" -->

6
मुझे यह पुराने ढंग का लगता है। वास्तव में, इस तरह की एक सरल क्रिया करने के लिए स्क्रिप्ट का उपयोग करके पूरे बहुत से लाभ नहीं होते हैं।
जेना लीफ

3
वास्तव में, स्क्रिप्ट का उपयोग करने वाली फ़ाइलों में प्रमुख नुकसान हैं: यह प्रदर्शन में बाधा उत्पन्न करता है क्योंकि क्लाइंट को मुख्य पृष्ठ को डाउनलोड करने, DOM को लोड करने, स्क्रिप्ट चलाने और उसके बाद ही शामिल फ़ाइलों को डाउनलोड करने की आवश्यकता होती है, जिसमें शामिल फ़ाइल के लिए अतिरिक्त सर्वर अनुरोध की आवश्यकता होती है । सर्वर साइड का उपयोग करते हुए फाइलें शामिल करना, पहले सर्वर अनुरोध के दौरान सभी तत्वों को शामिल करना, कोई क्लाइंट कार्रवाई की आवश्यकता नहीं है।
षड़यंत्र

लघु उद्योग के एक फाइल एक्सटेंशन का उपयोग कर की आवश्यकता है: .shtml, .stm, .shtm। यह Apache, LiteSpeed, nginx, lighttpd और IIS में काम करता है।
ubershmekel

@ubershmekel जैसा कि आपने कहा, प्रासंगिक वेबसर्वर SSI का समर्थन करते हैं। फ़ाइल एक्सटेंशन सीमित नहीं है .shtml, .stmऔर .shtm: IIS पर, सभी पार्स की गई फ़ाइलों में SSI, उदा .aspx। यदि PHP के साथ काम करते हैं, तो आपको परिणाम प्राप्त करने के बजाय PHP includeया virtualकमांड का उपयोग करने की आवश्यकता है ।
षड़यन्त्र

32

आपको जावास्क्रिप्ट के साथ HTML फ़ाइल संरचना का उपयोग करना चाहिए? क्या आपने इसके बजाय PHP का उपयोग करने पर विचार किया है ताकि आप साधारण PHP का उपयोग कर सकते हैं इसमें ऑब्जेक्ट शामिल हैं?

यदि आप अपने .html पृष्ठों के फ़ाइल नाम को .php में परिवर्तित करते हैं - तो अपने प्रत्येक .php पृष्ठों के शीर्ष पर आप अपने शीर्ष लेख से सामग्री को शामिल करने के लिए कोड की एक पंक्ति का उपयोग कर सकते हैं।

<?php include('header.php'); ?>

अपनी पाद लेख की सामग्री को शामिल करने के लिए प्रत्येक पृष्ठ के पाद लेख में ऐसा ही करें

<?php include('footer.php'); ?>

कोई जावास्क्रिप्ट / Jquery या अतिरिक्त शामिल फ़ाइलों की आवश्यकता नहीं है।

NB आप अपनी .htaccess फ़ाइल में निम्न का उपयोग करके अपनी .html फ़ाइलों को .php फ़ाइलों में परिवर्तित कर सकते हैं

# re-write html to php
RewriteRule ^(.*)\.html$ $1.php [L]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]


# re-write no extension to .php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

2
@ जस्टिन808 - ओपी में एक स्थानीय होस्ट की गई स्थापना के बारे में कुछ भी नहीं है, इसलिए मैंने माना कि वह सर्वर आधारित फाइलों के बारे में बात कर रहा था।
सोल

1
@ एसओएल हालांकि ओपी डीआईडी ​​विशेष रूप से जावास्क्रिप्ट का उपयोग करना चाहता है, इसलिए आपका उत्तर ऑफ टॉपिक है। पूर्ण-स्टैक वेब विकास तेजी से PHP का उपयोग करने से दूर जा रहा है, Node.js सभी को समान कार्यक्षमता प्रदान करता है और केवल जावास्क्रिप्ट का उपयोग करने की आवश्यकता होती है। टीएल; डीआर कृपया पूछे गए सवालों के जवाब दें। ओपी एक जेएस समाधान चाहता था, इसलिए उसे पीएचपी, रूबी, पायथन, सी ++, या किसी अन्य भाषा में समाधान देना अनुचित है।
ज़ैक

9

मैं इस की कोशिश की: एक फ़ाइल बनाएँ header.html की तरह

<!-- Meta -->
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<!-- JS -->
<script type="text/javascript" src="js/lib/jquery-1.11.1.min.js" ></script>
<script type="text/javascript" src="js/lib/angular.min.js"></script>
<script type="text/javascript" src="js/lib/angular-resource.min.js"></script>
<script type="text/javascript" src="js/lib/angular-route.min.js"></script>
<link rel="stylesheet" href="css/bootstrap.min.css">

<title>Your application</title>

अब शामिल header.html की तरह अपने HTML पृष्ठों में:

<head>
   <script type="text/javascript" src="js/lib/jquery-1.11.1.min.js" ></script>
   <script> 
     $(function(){ $("head").load("header.html") });
   </script>
</head>

पूरी तरह से ठीक काम करता है।


1
अच्छा समाधान है, लेकिन मुझे लगता है कि यह प्रारंभिक पृष्ठ लोड के लिए एक बार, दो बार jquery ढांचे को लोड करेगा, और दूसरा जब .लोड () विधि निष्पादित होती है - चूंकि लक्ष्य पृष्ठ में jquery भी शामिल है।
डेलली

8

आप भी डाल सकते हैं: (load_essentials.js :)

document.getElementById("myHead").innerHTML =
	"<span id='headerText'>Title</span>"
	+ "<span id='headerSubtext'>Subtitle</span>";
document.getElementById("myNav").innerHTML =
	"<ul id='navLinks'>"
	+ "<li><a href='index.html'>Home</a></li>"
	+ "<li><a href='about.html'>About</a>"
	+ "<li><a href='donate.html'>Donate</a></li>"
	+ "</ul>";
document.getElementById("myFooter").innerHTML =
	"<p id='copyright'>Copyright &copy; " + new Date().getFullYear() + " You. All"
	+ " rights reserved.</p>"
	+ "<p id='credits'>Layout by You</p>"
	+ "<p id='contact'><a href='mailto:you@you.com'>Contact Us</a> / "
	+ "<a href='mailto:you@you.com'>Report a problem.</a></p>";
<!--HTML-->
<header id="myHead"></header>
<nav id="myNav"></nav>
Content
<footer id="myFooter"></footer>

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


6

मुझे लगता है, इस प्रश्न के उत्तर बहुत पुराने हैं ... वर्तमान में कुछ डेस्कटॉप और मोबाइल ब्राउज़र ऐसा करने के लिए HTML टेम्पलेट का समर्थन करते हैं।

मैंने एक छोटा सा उदाहरण बनाया है:

परीक्षण ठीक क्रोम 61.0, ओपेरा 48.0, ओपेरा नियॉन 1.0, Android ब्राउज़र 6.0, क्रोम मोबाइल 61.0 और adblocker ब्राउज़र 54.0 में
KO परीक्षण सफारी 10.1 में, फ़ायरफ़ॉक्स 56.0, एज 38.14 और IE 11

Canisue.com में अधिक संगतता जानकारी

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTML Template Example</title>

    <link rel="stylesheet" href="styles.css">
    <link rel="import" href="autoload-template.html">
</head>
<body>

<div class="template-container">1</div>
<div class="template-container">2</div>
<div class="template-container">3</div>
<div class="template-container">4</div>
<div class="template-container">5</div>

</body>
</html>

autoload-template.html

<span id="template-content">
    Template Hello World!
</span>

<script>
    var me = document.currentScript.ownerDocument;
    var post = me.querySelector( '#template-content' );

    var container = document.querySelectorAll( '.template-container' );

    //alert( container.length );
    for(i=0; i<container.length ; i++) {
        container[i].appendChild( post.cloneNode( true ) );
    }
</script>

styles.css

#template-content {
    color: red;
}

.template-container {
    background-color: yellow;
    color: blue;
}

इस HTML5 रॉक्स पोस्ट में आपके और उदाहरण मिल सकते हैं


4
HTML आयात अब हटा दिया गया है।
जोनाथन शरमन

5

मैं C # / रेजर में काम कर रहा हूं और चूंकि मेरे घर के लैपटॉप पर IIS सेटअप नहीं है, इसलिए हमने हमारी परियोजना के लिए स्थैतिक मार्कअप बनाते समय विचारों में लोड करने के लिए एक जावास्क्रिप्ट समाधान की तलाश की।

मैं "डीकिंग जेकरी" के तरीकों की व्याख्या करने वाली एक वेबसाइट पर ठोकर खाई, यह साइट पर एक विधि का प्रदर्शन करता है जो आप सादे जेन जावास्क्रिप्ट ( पोस्ट के निचले भाग में संदर्भ लिंक ) के बाद करते हैं । यदि आप उत्पादन में इसका उपयोग करने का इरादा रखते हैं, तो किसी भी सुरक्षा कमजोरियों और संगतता मुद्दों की जांच करना सुनिश्चित करें। मैं नहीं हूं, इसलिए मैंने कभी खुद पर ध्यान नहीं दिया।

जेएस समारोह

var getURL = function (url, success, error) {
    if (!window.XMLHttpRequest) return;
    var request = new XMLHttpRequest();
    request.onreadystatechange = function () {
        if (request.readyState === 4) {
            if (request.status !== 200) {
                if (error && typeof error === 'function') {
                    error(request.responseText, request);
                }
                return;
            }
            if (success && typeof success === 'function') {
                success(request.responseText, request);
            }
        }
    };
    request.open('GET', url);
    request.send();
};

सामग्री प्राप्त करें

getURL(
    '/views/header.html',
    function (data) {
        var el = document.createElement(el);
        el.innerHTML = data;
        var fetch = el.querySelector('#new-header');
        var embed = document.querySelector('#header');
        if (!fetch || !embed) return;
        embed.innerHTML = fetch.innerHTML;

    }
);

index.html

<!-- This element will be replaced with #new-header -->
<div id="header"></div>

विचारों / header.html

<!-- This element will replace #header -->
<header id="new-header"></header>

स्रोत मेरा अपना नहीं है, मैं इसे केवल ओपी के लिए एक अच्छा वेनिला जावास्क्रिप्ट समाधान के रूप में संदर्भित कर रहा हूं। मूल कोड यहां रहता है: http://gomakethings.com/ditching-jquery#get-html-from-another-page


अच्छा समाधान। मैं इस एक jquery का उपयोग करने के लिए पसंद करते हैं।
डेलली

2

अलोहा 2018 से। दुर्भाग्य से, मेरे पास आपके साथ साझा करने के लिए कुछ भी अच्छा या भविष्य नहीं है।

लेकिन मैं उन लोगों को इंगित करना चाहता था जिन्होंने टिप्पणी की है कि load()वर्तमान में काम नहीं कर रहा jQuery विधि शायद स्थानीय वेब सर्वर को चलाने के बिना स्थानीय फ़ाइलों के साथ विधि का उपयोग करने की कोशिश कर रहा है। ऐसा करने से फेंक देते हैं उल्लेख किया "पार मूल" त्रुटि है, जो निर्दिष्ट करता है कि पार मूल इस तरह का अनुरोध करता है के रूप में लोड विधि द्वारा किए गए कि केवल की तरह प्रोटोकॉल योजनाओं के लिए समर्थन कर रहे ऊपर http, data, या https। (मैं मान रहा हूं कि आप वास्तविक क्रॉस-ऑरिजनल रिक्वेस्ट नहीं कर रहे हैं, अर्थात शीर्षलेख। html फ़ाइल वास्तव में उसी डोमेन पर है जिस पृष्ठ से आप यह अनुरोध कर रहे हैं)

इसलिए, यदि ऊपर दिया गया स्वीकृत उत्तर आपके लिए काम नहीं कर रहा है, तो कृपया सुनिश्चित करें कि आप एक वेब सर्वर चला रहे हैं। ऐसा करने का सबसे तेज़ और सरल तरीका है कि अगर आप जल्दबाज़ी में हैं (और मैक का उपयोग कर रहे हैं, जिसमें पायथन पहले से स्थापित है) तो एक साधारण पायथन http सर्वर को स्पिन करना होगा। आप देख सकते हैं कि यह करना कितना आसान है

आशा है कि ये आपकी मदद करेगा!


एक वेब सर्वर का उपयोग करना इस बिंदु को हरा देता है, कम से कम मेरे लिए जावास्क्रिप्ट का उपयोग करने का कारण केवल इसे आसान विकसित करना है।
कोनराड होफनर

1

स्क्रिप्ट और लिंक को हेडर में लोड करना भी संभव है। मैं इसे ऊपर के एक उदाहरण से जोड़ रहा हूँ ...

<!--load_essentials.js-->
document.write('<link rel="stylesheet" type="text/css" href="css/style.css" />');
document.write('<link rel="stylesheet" type="text/css" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />');
document.write('<script src="js/jquery.js" type="text/javascript"></script>');

document.getElementById("myHead").innerHTML =
"<span id='headerText'>Title</span>"
+ "<span id='headerSubtext'>Subtitle</span>";
document.getElementById("myNav").innerHTML =
"<ul id='navLinks'>"
+ "<li><a href='index.html'>Home</a></li>"
+ "<li><a href='about.html'>About</a>"
+ "<li><a href='donate.html'>Donate</a></li>"
+ "</ul>";
document.getElementById("myFooter").innerHTML =
"<p id='copyright'>Copyright &copy; " + new Date().getFullYear() + " You. All"
+ " rights reserved.</p>"
+ "<p id='credits'>Layout by You</p>"
+ "<p id='contact'><a href='mailto:you@you.com'>Contact Us</a> / "
+ "<a href='mailto:you@you.com'>Report a problem.</a></p>";

<!--HTML-->
<header id="myHead"></header>
<nav id="myNav"></nav>
Content
<footer id="myFooter"></footer>

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

0

इस प्रश्न के उपलब्ध होने के बाद से उपलब्ध कराया गया एक और दृष्टिकोण प्रतिक्रिया-एक्सप्रेस ( http://reactrb.org देखें ) का उपयोग करना है यह आपको क्लाइंट साइड पर रूबी में स्क्रिप्ट देगा, जो आपके html कोड को माणिक में लिखे गए प्रतिक्रिया घटकों के साथ बदल देगा।


1
ऑप ने केवल html और जावास्क्रिप्ट का उपयोग करके पूछा लेकिन आप उसे माणिक का उपयोग करने के लिए लेते हैं ..: D lol लेकिन शांत उपकरण आदमी ..
Meily Chhon

मैंने प्रश्न की भावना को लिया - बिना सर्वर के टेंपलेटिंग भाषाओं के। यह सब जावास्क्रिप्ट को संकलित करता है इसलिए मेरा मानना ​​है कि यह प्रश्न के इरादे से मिलता है।
मिच वनडुइन

-1

उस HTML को सहेजें जिसे आप एक .html फ़ाइल में शामिल करना चाहते हैं:

Content.html

<a href="howto_google_maps.asp">Google Maps</a><br>
<a href="howto_css_animate_buttons.asp">Animated Buttons</a><br>
<a href="howto_css_modals.asp">Modal Boxes</a><br>
<a href="howto_js_animate.asp">Animations</a><br>
<a href="howto_js_progressbar.asp">Progress Bars</a><br>
<a href="howto_css_dropdown.asp">Hover Dropdowns</a><br>
<a href="howto_js_dropdown.asp">Click Dropdowns</a><br>
<a href="howto_css_table_responsive.asp">Responsive Tables</a><br>

HTML को शामिल करें

HTML सहित w3- शामिल- html विशेषता का उपयोग करके किया जाता है :

उदाहरण

    <div w3-include-html="content.html"></div>

जावास्क्रिप्ट जोड़ें

HTML में JavaScript शामिल है।

    <script>
    function includeHTML() {
      var z, i, elmnt, file, xhttp;
      /*loop through a collection of all HTML elements:*/
      z = document.getElementsByTagName("*");
      for (i = 0; i < z.length; i++) {
        elmnt = z[i];
        /*search for elements with a certain atrribute:*/
        file = elmnt.getAttribute("w3-include-html");
        if (file) {
          /*make an HTTP request using the attribute value as the file name:*/
          xhttp = new XMLHttpRequest();
          xhttp.onreadystatechange = function() {
            if (this.readyState == 4) {
              if (this.status == 200) {elmnt.innerHTML = this.responseText;}
              if (this.status == 404) {elmnt.innerHTML = "Page not found.";}
              /*remove the attribute, and call this function once more:*/
              elmnt.removeAttribute("w3-include-html");
              includeHTML();
            }
          } 
          xhttp.open("GET", file, true);
          xhttp.send();
          /*exit the function:*/
          return;
        }
      }
    }
    </script>

कॉल शामिल HTML () पृष्ठ के नीचे:

उदाहरण

<!DOCTYPE html>
<html>
<script>
function includeHTML() {
  var z, i, elmnt, file, xhttp;
  /*loop through a collection of all HTML elements:*/
  z = document.getElementsByTagName("*");
  for (i = 0; i < z.length; i++) {
    elmnt = z[i];
    /*search for elements with a certain atrribute:*/
    file = elmnt.getAttribute("w3-include-html");
    if (file) {
      /*make an HTTP request using the attribute value as the file name:*/
      xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
        if (this.readyState == 4) {
          if (this.status == 200) {elmnt.innerHTML = this.responseText;}
          if (this.status == 404) {elmnt.innerHTML = "Page not found.";}
          /*remove the attribute, and call this function once more:*/
          elmnt.removeAttribute("w3-include-html");
          includeHTML();
        }
      }      
      xhttp.open("GET", file, true);
      xhttp.send();
      /*exit the function:*/
      return;
    }
  }
};
</script>
<body>

<div w3-include-html="h1.html"></div> 
<div w3-include-html="content.html"></div> 

<script>
includeHTML();
</script>

</body>
</html>

जब मैं उसके बाद index.html का परीक्षण करता हूं तो मुझे श्वेत रिक्त पृष्ठ मिलता है
हुसैन एल्बेहिरि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.