Ich habe 2 HTML-Dateien, nehme an a.html
und b.html
. In a.html
möchte ich aufnehmenb.html
.
In JSF kann ich das so machen:
<ui:include src="b.xhtml" />
Es bedeutet, dass a.xhtml
ich in die Datei aufnehmen kann b.xhtml
.
Wie können wir es in *.html
Datei machen?
javascript
html
include
lolo
quelle
quelle
localhost
: stackoverflow.com/questions/7542872/…Antworten:
Meiner Meinung nach verwendet die beste Lösung jQuery:
a.html
::b.html
::Diese Methode ist eine einfache und saubere Lösung für mein Problem.
Die jQuery-
.load()
Dokumentation finden Sie hier .quelle
$(function(){})
wird erst ausgeführt, nachdem das Dokument vollständig geladen wurde .XMLHttpRequest cannot load file:///.../b.html. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
Wenn Sie die Antwort von lolo von oben erweitern, finden Sie hier etwas mehr Automatisierung, wenn Sie viele Dateien einfügen müssen:
Und dann etwas in das HTML aufzunehmen:
Dazu gehören die Dateien views / header.html und views / footer.html
quelle
data-argument
in der enthaltenen Datei abzurufen?$("#postdiv").load('posts.php?name=Test&age=25');
class="include"
- machen Sie einfach Ihren jQuery-Selektorvar includes = $('[data-include]');
Meine Lösung ähnelt der von Lolo oben. Ich füge den HTML-Code jedoch über document.write von JavaScript ein, anstatt jQuery zu verwenden:
a.html:
b.js:
Der Grund für mich gegen die Verwendung von jQuery ist, dass jQuery.js eine Größe von ~ 90 KB hat und ich die zu ladende Datenmenge so klein wie möglich halten möchte.
Um die ordnungsgemäß maskierte JavaScript-Datei ohne großen Aufwand zu erhalten, können Sie den folgenden Befehl sed verwenden:
Oder benutzen Sie einfach die folgenden praktischen Bash - Skript als Gist auf Github veröffentlicht, die alle notwendigen Arbeiten automatisiert, Umwandlung
b.html
zub.js
: https://gist.github.com/Tafkadasoh/334881e18cbb7fc2a5c033bfa03f6ee6Dank an Greg Minshall für den verbesserten sed-Befehl, der auch Schrägstrichen und einfachen Anführungszeichen entgeht, die mein ursprünglicher sed-Befehl nicht berücksichtigt hat.
Alternativ für Browser, die Vorlagenliterale unterstützen funktioniert auch Folgendes:
b.js:
quelle
'
Markierungen funktionieren . Wenn Sie nur ein Suchen / Ersetzen durchführen, um` with
\ `DANN suchen / ersetzen, um'
durch\'
und neue Zeilen durch` `neue Zeilen zu ersetzen, funktioniert dies einwandfrei.`
- dann können Sie Ausdrücke einfügen wie${var}
- Sie müssen dann nur noch entkommen\`
und\$
Checkout HTML5-Importe über Html5rocks Tutorial und bei Polymer-Project
Zum Beispiel:
quelle
stuff.html
verfügbar gemacht. Sie müssen jedoch Skripte verwenden, um Klone des DOM auf der übergeordneten Seite zu erstellen , damit sie für den Benutzer sichtbar sind.TypeError: ... .import is undefined
. MDN sagt: "Diese Funktion ist derzeit in keinem Browser nativ implementiert." Weiß jemand, ob es möglich ist, FF mit dieser Funktion zu erstellen?Schamloser Plug einer Bibliothek, die ich geschrieben habe, um dies zu lösen.
https://github.com/LexmarkWeb/csi.js
Das Obige nimmt den Inhalt von
/path/to/include.html
und ersetzt ihndiv
durch ihn.quelle
<div data-include="/path/to/include.html"></div>
. Dieses Tool erleichtert es, ein einfaches mehrseitiges No-Plugin-Modell auf saubere Weise zu erstellen.Eine einfache serverseitige Include-Anweisung zum Einfügen einer anderen Datei, die sich im selben Ordner befindet, sieht folgendermaßen aus:
quelle
<!--#include file="a.html" -->
als auchKeine Notwendigkeit für Skripte. Keine Notwendigkeit, irgendwelche ausgefallenen Sachen serverseitig zu machen (obwohl das wahrscheinlich eine bessere Option wäre)
Da alte Browser kein nahtloses System unterstützen, sollten Sie CSS hinzufügen, um das Problem zu beheben:
Beachten Sie, dass bei Browsern, die keine nahtlose Unterstützung bieten, der Frame auf diese URL und nicht auf das gesamte Fenster verweist, wenn Sie auf einen Link im Iframe klicken . Eine Möglichkeit, dies zu umgehen, besteht darin, alle Links zu haben
target="_parent"
, obwohl die Browserunterstützung "gut genug" ist.quelle
seamless
Attribut wurde aus dem HTML-Entwurf entfernt, aus dem es stammt. Benutze es nicht.Eine sehr alte Lösung, die ich damals erfüllt habe, aber so geht's mit standardkonformem Code:
quelle
<object>
,<embed>
und<iframe>
alle funktionieren dafür, aber in allen drei Fällen erstellen sie separate Dokumente mit ihren eigenen Stil- und Skriptkontexten (iframe enthält insbesondere hässliche Rahmen und Bildlaufleisten), und zum Beispiel öffnen sich standardmäßig alle Links in ihnen und nicht in der übergeordnete Seite (obwohl dies mit target = "_ parent" überschrieben werden kann). Von all diesen ist iframe der einzige, der Hoffnung hat, durch das HTML5-seamless
Attribut (erwähnt von bjb568) stärker integriert zu werden , aber es wird noch nicht gut unterstützt: caniuse.com/#feat=iframe-seamlessseamless
Attribut) ist der einzige veraltete Teil - der Rest gilt weiterhin.Wenn Sie auf Ihrem Server Zugriff auf die .htaccess-Datei haben, können Sie alternativ eine einfache Anweisung hinzufügen, mit der PHP für Dateien interpretiert werden kann, die mit der Erweiterung .html enden.
Jetzt können Sie ein einfaches PHP-Skript verwenden, um andere Dateien einzuschließen, wie z.
quelle
.htaccess
kann dazu führen, dasshtml
Seiten versuchen, als Dateien herunterzuladen, anstatt sie im Browser anzuzeigen. Zuerst testen. Haftungsausschluss: Das ist mir gerade passiert, als ich die obige Lösung ausprobiert habe. Mein.htaccess
war bis auf zwei Zeilen leer. Vorsicht ist geboten. Versuchen Sielolo
stattdessen die jQuery-Lösung (unten).Das Folgende funktioniert, wenn HTML-Inhalte aus einer Datei enthalten sein müssen: Die folgende Zeile enthält beispielsweise den Inhalt vonpiece_to_include.html an der Stelle, an der die OBJECT-Definition auftritt.
Referenz: http://www.w3.org/TR/WD-html40-970708/struct/includes.html#h-7.7.4
quelle
Hier ist meine Lösung vor Ort:
quelle
In w3.js sind folgende Arbeiten enthalten:
Eine korrekte Beschreibung finden Sie hier: https://www.w3schools.com/howto/howto_html_include.asp
quelle
Das hat mir geholfen. Um einen Block HTML-Code von
b.html
bis hinzuzufügena.html
, sollte dies in dashead
Tag vona.html
:Dann wird im Body-Tag ein Container mit einer eindeutigen ID und einem Javascript-Block erstellt, um den
b.html
wie folgt in den Container zu laden :quelle
Ich weiß, dass dies ein sehr alter Beitrag ist, daher waren einige Methoden damals nicht verfügbar. Aber hier ist meine sehr einfache Sichtweise (basierend auf Lolos Antwort).
Es basiert auf den HTML5-Daten- * -Attributen und ist daher sehr allgemein, da es die jQuery-Funktion für jede Funktion verwendet, um jede mit "load-html" übereinstimmende .class-Übereinstimmung abzurufen, und das entsprechende 'Datenquellen'-Attribut verwendet, um den Inhalt zu laden:
quelle
Sie können eine Polyfüllung aus HTML-Importen ( https://www.html5rocks.com/en/tutorials/webcomponents/imports/ ) oder diese vereinfachte Lösung verwenden https://github.com/dsheiko/html-import verwenden
Auf der Seite importieren Sie beispielsweise den folgenden HTML-Block:
Der Block kann eigene Importe haben:
Der Importer ersetzt die Direktive durch das geladene HTML, ähnlich wie SSI
Diese Anweisungen werden automatisch bereitgestellt, sobald Sie dieses kleine JavaScript laden:
Die Importe werden verarbeitet, wenn DOM automatisch bereit ist. Außerdem wird eine API verfügbar gemacht, mit der Sie manuell ausführen, Protokolle abrufen usw. können. Genießen :)
quelle
script async src
es scheint. Probieren Sie es aus!Die meisten Lösungen funktionieren, aber sie haben Probleme mit jquery :
Das Problem besteht darin, dass der folgende Code
$(document).ready(function () { alert($("#includedContent").text()); }
nichts warnt, anstatt den enthaltenen Inhalt zu warnen.Ich schreibe den folgenden Code, in meiner Lösung können Sie auf enthaltene Inhalte in der
$(document).ready
Funktion zugreifen :(Der Schlüssel lädt den enthaltenen Inhalt synchron).
index.htm :
include.inc :
jquery include Plugin auf Github
quelle
So fügen Sie den Inhalt der genannten Datei ein:
quelle
Die Antwort des Athari (die erste!) War zu schlüssig! Sehr gut!
Wenn Sie jedoch den Namen der Seite als URL-Parameter übergeben möchten, bietet dieser Beitrag eine sehr schöne Lösung in Kombination mit:
http://www.jquerybyexample.net/2012/06/get-url-parameters-using-jquery.html
So wird es ungefähr so:
Ihre URL:
Der a.html- Code lautet nun:
Es hat sehr gut für mich funktioniert! Ich hoffe ich habe geholfen :)
quelle
html5rocks.com hat ein sehr gutes Tutorial zu diesem Thema, und das mag etwas spät sein, aber ich selbst wusste nicht, dass es das gibt. w3schools hat auch die Möglichkeit, dies mit ihrer neuen Bibliothek namens w3.js zu tun. Die Sache ist, dies erfordert die Verwendung eines Webservers und eines HTTPRequest-Objekts. Sie können diese nicht lokal laden und auf Ihrem Computer testen. Sie können jedoch Polyfills verwenden, die über den Link html5rocks oben bereitgestellt werden, oder dem Tutorial folgen. Mit ein wenig JS-Magie können Sie so etwas tun:
Dadurch wird der Link erstellt (kann sich als gewünschtes Linkelement ändern, wenn er bereits festgelegt ist), der Import festgelegt wird (sofern Sie ihn nicht bereits haben) und anschließend angehängt. Von dort nimmt es das und analysiert die Datei in HTML und hängt sie dann unter einem div an das gewünschte Element an. Dies kann alles geändert werden, um Ihren Anforderungen vom anhängenden Element bis zum von Ihnen verwendeten Link zu entsprechen. Ich hoffe, dies hat geholfen. Es ist jetzt möglicherweise irrelevant, ob neuere, schnellere Methoden ohne Verwendung von Bibliotheken und Frameworks wie jQuery oder W3.js herausgekommen sind.
UPDATE: Dies führt zu einem Fehler, der besagt, dass der lokale Import durch die CORS-Richtlinie blockiert wurde. Möglicherweise benötigen Sie Zugriff auf das Deep Web, um dies aufgrund der Eigenschaften des Deep Web verwenden zu können. (Bedeutet keine praktische Verwendung)
quelle
Hier ist mein Ansatz mit Fetch API und Async-Funktion
quelle
Derzeit gibt es keine direkte HTML-Lösung für die Aufgabe. Sogar HTML-Importe (die permanent im Entwurf sind ) werden das nicht tun, da Import! = Include und etwas JS-Magie sowieso erforderlich sind.
Ich habe kürzlich ein VanillaJS- Skript geschrieben , das nur dazu dient, HTML ohne Komplikationen in HTML aufzunehmen.
Einfach in deine
a.html
Es ist
open-source
und kann eine Idee geben (ich hoffe)quelle
Sie können dies mit der JavaScript-Bibliothek jQuery wie folgt tun:
HTML:
JS:
Bitte beachten Sie, dass
banner.html
sich diese unter derselben Domain befinden sollten, in der sich auch Ihre anderen Seiten befinden. Andernfalls lehnen Ihre Webseiten diebanner.html
Datei aufgrund von Richtlinien zur gemeinsamen Nutzung von Ressourcen ab .Beachten Sie außerdem, dass Google beim Laden Ihrer Inhalte mit JavaScript diese nicht indizieren kann, sodass dies aus SEO-Gründen nicht gerade eine gute Methode ist.
quelle
Haben Sie eine iFrame-Injektion versucht?
Es fügt den iFrame in das Dokument ein und löscht sich selbst (es soll sich dann im HTML-DOM befinden).
<iframe src="header.html" onload="this.before((this.contentDocument.body||this.contentDocument).children[0]);this.remove()"></iframe>
Grüße
quelle
Ich bin zu diesem Thema gekommen, um etwas Ähnliches zu suchen, aber ein bisschen anders als das Problem von Lolo. Ich wollte eine HTML-Seite erstellen, die ein alphabetisches Menü mit Links zu anderen Seiten enthält, und jede der anderen Seiten kann vorhanden sein oder nicht, und die Reihenfolge, in der sie erstellt wurden, ist möglicherweise nicht alphabetisch (oder sogar numerisch). Ebenso wie Tafkadasoh wollte ich die Webseite nicht mit jQuery aufblähen. Nachdem ich das Problem untersucht und mehrere Stunden lang experimentiert habe, hat Folgendes für mich funktioniert, wobei relevante Anmerkungen hinzugefügt wurden:
quelle
Hier ist ein großartiger Artikel . Sie können eine allgemeine Bibliothek implementieren und einfach den folgenden Code verwenden, um HTML-Dateien in einer Zeile zu importieren.
Sie können auch Google Polymer ausprobieren
quelle
Verwenden von ES6-Backticks ``: Template-Literale !
Auf diese Weise können wir HTML einschließen, ohne Anführungszeichen zu codieren, Variablen aus dem DOM einschließen und so weiter.
Es ist eine leistungsstarke Template-Engine. Wir können separate JS-Dateien verwenden und Ereignisse verwenden, um den Inhalt an Ort und Stelle zu laden, oder sogar alles in Blöcken trennen und bei Bedarf aufrufen:
https://caniuse.com/#feat=template-literals
quelle
javascript
Abzeichen als Hobby-Programmierer bis dahin weitgehend zerschlagen .Damit Solution funktioniert, müssen Sie die Datei csi.min.js einfügen, die Sie hier finden .
Gemäß dem auf GitHub gezeigten Beispiel müssen Sie zur Verwendung dieser Bibliothek die Datei csi.js in Ihren Seitenkopf aufnehmen und anschließend das Attribut data-include mit dem Wert, der auf die Datei festgelegt ist, die Sie einschließen möchten, in den Container einfügen Element.
Kopiercode ausblenden
... ich hoffe es hilft.
quelle
PHP ist eine Skriptsprache auf Serverebene. Es kann viele Dinge tun, aber eine beliebte Verwendung ist das Einfügen von HTML-Dokumenten in Ihre Seiten, ähnlich wie bei SSI. Wie bei SSI handelt es sich hierbei um eine Technologie auf Serverebene. Wenn Sie nicht sicher sind, ob Ihre Website über PHP-Funktionen verfügt, wenden Sie sich an Ihren Hosting-Anbieter.
Hier ist ein einfaches PHP-Skript, mit dem Sie einen HTML-Ausschnitt auf jeder PHP-fähigen Webseite einfügen können:
Speichern Sie den HTML-Code für die allgemeinen Elemente Ihrer Site, um Dateien zu trennen. Beispielsweise kann Ihr Navigationsbereich als navigation.html oder navigation.php gespeichert werden. Verwenden Sie den folgenden PHP-Code, um diesen HTML-Code in jede Seite aufzunehmen.
Verwenden Sie auf jeder Seite, auf der Sie die Datei einfügen möchten, denselben Code. Stellen Sie sicher, dass Sie den hervorgehobenen Dateinamen in den Namen und den Pfad zu Ihrer Include-Datei ändern.
quelle
Wenn Sie ein Framework wie Django / Bootle verwenden, wird häufig eine Template-Engine ausgeliefert. Angenommen, Sie verwenden eine Flasche, und die Standardvorlagen-Engine ist SimpleTemplate Engine . Und unten ist die reine HTML-Datei
Sie können die Datei footer.tpl in Ihre Hauptdatei aufnehmen, z.
Außerdem können Sie Parameter an Ihre dashborard.tpl übergeben.
quelle
Basierend auf der Antwort von https://stackoverflow.com/a/31837264/4360308 habe ich diese Funktionalität mit Nodejs (+ Express + Cheerio) wie folgt implementiert:
HTML (index.html)
JS
append -> schließt den Inhalt in das div ein
ersetzen -> ersetzt das div
Sie können leicht weitere Verhaltensweisen hinzufügen, die demselben Design folgen
quelle