J'ai 2 fichiers HTML, supposons a.html
et b.html
. Dans a.html
je veux inclure b.html
.
En JSF, je peux le faire comme ça:
<ui:include src="b.xhtml" />
Cela signifie que dans le a.xhtml
fichier, je peux inclure b.xhtml
.
Comment pouvons-nous le faire en *.html
fichier?
javascript
html
include
lolo
la source
la source
localhost
: stackoverflow.com/questions/7542872/…Réponses:
À mon avis, la meilleure solution utilise jQuery:
a.html
:b.html
:Cette méthode est une solution simple et propre à mon problème.
La
.load()
documentation jQuery est ici .la source
$(function(){})
ne s'exécutera qu'après le chargement du document.XMLHttpRequest cannot load file:///.../b.html. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
En développant la réponse de lolo d'en haut, voici un peu plus d'automatisation si vous devez inclure beaucoup de fichiers:
Et puis pour inclure quelque chose dans le html:
Ce qui comprendrait le fichier views / header.html et views / footer.html
la source
data-argument
et de le récupérer dans le fichier inclus?$("#postdiv").load('posts.php?name=Test&age=25');
class="include"
- faites simplement votre sélecteur jQueryvar includes = $('[data-include]');
Ma solution est similaire à celle de lolo ci-dessus. Cependant, j'insère le code HTML via le document.write de JavaScript au lieu d'utiliser jQuery:
a.html:
b.js:
La raison pour laquelle je n'utilise pas jQuery est que jQuery.js a une taille de ~ 90 Ko, et je souhaite que la quantité de données à charger soit aussi petite que possible.
Afin d'obtenir le fichier JavaScript correctement échappé sans trop de travail, vous pouvez utiliser la commande sed suivante:
Ou utilisez simplement le script bash pratique publié sous forme de Gist sur Github, qui automatise tous les travaux nécessaires, en les convertissant
b.html
enb.js
: https://gist.github.com/Tafkadasoh/334881e18cbb7fc2a5c033bfa03f6ee6Remerciements à Greg Minshall pour la commande sed améliorée qui échappe également aux barres obliques inversées et aux guillemets simples, que ma commande sed originale ne prenait pas en compte.
Sinon, pour les navigateurs qui prennent en charge les littéraux de modèle, les éléments suivants fonctionnent également:
b.js:
la source
'
marques. Si vous faites juste une recherche / remplacement pour remplacer` with
\ `ALORS trouver / remplacer pour remplacer'
par\'
et new-lines avec` `new-lines cela fonctionnera bien.`
- puis vous pouvez insérer des expressions comme${var}
- vous n'avez alors qu'à vous échapper\`
et\$
Checkout HTML5 importe via le tutoriel Html5rocks et au projet polymère
Par exemple:
la source
stuff.html
disponible qu'en tant que modèle dans la page parent, mais vous devez utiliser des scripts pour créer des clones de son DOM dans la page parent afin qu'ils soient visibles pour l'utilisateur.TypeError: ... .import is undefined
. MDN dit "Cette fonctionnalité n'est pas implémentée nativement dans les navigateurs pour le moment." Est-ce que quelqu'un sait s'il est possible de construire FF avec cette fonctionnalité?Plug sans vergogne d'une bibliothèque que j'ai écrite pour résoudre ce problème.
https://github.com/LexmarkWeb/csi.js
Ce qui précède prendra le contenu de
/path/to/include.html
et le remplaceradiv
par.la source
<div data-include="/path/to/include.html"></div>
. Cet outil permet de créer plus facilement une maquette multipage simple sans plug-in.Une simple directive include côté serveur pour inclure un autre fichier trouvé dans le même dossier ressemble à ceci:
la source
<!--#include file="a.html" -->
Pas besoin de scripts. Pas besoin de faire des trucs fantaisistes côté serveur (ce qui serait probablement une meilleure option)
Étant donné que les anciens navigateurs ne prennent pas en charge la transparence, vous devez ajouter des CSS pour y remédier:
Gardez à l'esprit que pour les navigateurs qui ne prennent pas en charge la transparence, si vous cliquez sur un lien dans l'iframe, le cadre ira à cette URL, pas à toute la fenêtre. Un moyen de contourner cela est d'avoir tous les liens
target="_parent"
, mais le support du navigateur est "assez bon".la source
seamless
attribut a été supprimé du brouillon HTML dont il est issu. Ne l'utilisez pas.Une solution très ancienne que j'avais satisfaite à l'époque, mais voici comment faire du code conforme aux normes:
la source
<object>
,<embed>
et<iframe>
tous fonctionnent pour cela, mais dans les trois cas, ils créent des documents séparés avec leurs propres contextes de style et de script (iframe comprend en particulier des bordures et des barres de défilement moches), et par exemple, tous les liens par défaut s'ouvrent en eux plutôt que sur le page parent (bien que cela puisse être remplacé par target = "_ parent"). De tous ces éléments, iframe est le seul qui espère devenir plus intégré via l'seamless
attribut HTML5 (mentionné par bjb568), mais il n'est pas encore bien pris en charge: caniuse.com/#feat=iframe-sirelessseamless
attribut) est la seule partie obsolète - le reste s'applique toujours.Comme alternative, si vous avez accès au fichier .htaccess sur votre serveur, vous pouvez ajouter une directive simple qui permettra d'interpréter php sur les fichiers se terminant par l'extension .html.
Vous pouvez maintenant utiliser un simple script php pour inclure d'autres fichiers tels que:
la source
.htaccess
peut entraîner lehtml
téléchargement des pages en tant que fichiers plutôt que leur affichage dans le navigateur. Testez d'abord. Avertissement: cela m'est arrivé tout à l'heure lorsque j'ai essayé la solution ci-dessus. Mon.htaccess
était vide à l'exception de plus de deux lignes. Attention conseillée. Essayezlolo
plutôt la solution jQuery (ci-dessous).La suite fonctionne si le contenu html d'un fichier doit être inclus: Par exemple, la ligne suivante inclura le contenu de piece_to_include.html à l'emplacement où se produit la définition OBJECT.
Référence: http://www.w3.org/TR/WD-html40-970708/struct/includes.html#h-7.7.4
la source
Voici ma solution sur place:
la source
Dans w3.js, des travaux comme celui-ci sont inclus:
Pour une description correcte, regardez ceci: https://www.w3schools.com/howto/howto_html_include.asp
la source
C'est ça qui m'a aidé. Pour ajouter un bloc de code html de
b.html
àa.html
, cela devrait aller dans lahead
balise dea.html
:Ensuite, dans la balise body, un conteneur est créé avec un identifiant unique et un bloc javascript pour charger le
b.html
dans le conteneur, comme suit:la source
Je sais que c'est un très vieux post, donc certaines méthodes n'étaient pas disponibles à l'époque. Mais voici ma vision très simple (basée sur la réponse de Lolo).
Il s'appuie sur les attributs HTML5 data- * et est donc très générique en ce qu'il utilise la fonction for-each de jQuery pour obtenir chaque .class correspondant à "load-html" et utilise son attribut 'data-source' respectif pour charger le contenu:
la source
Vous pouvez utiliser un polyfill d'import HTML ( https://www.html5rocks.com/en/tutorials/webcomponents/imports/ ), ou cette solution simplifiée https://github.com/dsheiko/html-import
Par exemple, sur la page vous importez un bloc HTML comme ça:
Le bloc peut avoir ses propres importations:
L'importateur remplace la directive par le code HTML chargé un peu comme SSI
Ces directives seront servies automatiquement dès que vous chargerez ce petit JavaScript:
Il traitera les importations lorsque DOM sera prêt automatiquement. En outre, il expose une API que vous pouvez utiliser pour exécuter manuellement, pour obtenir des journaux, etc. Prendre plaisir :)
la source
script async src
semble-t-il. L'essayer!La plupart des solutions fonctionnent mais elles ont un problème avec jquery :
Le problème est que le code suivant
$(document).ready(function () { alert($("#includedContent").text()); }
n'alerte rien au lieu d'alerter le contenu inclus.J'écris le code ci-dessous, dans ma solution, vous pouvez accéder au contenu inclus dans la
$(document).ready
fonction:(La clé charge le contenu inclus de manière synchrone).
index.htm :
include.inc :
jquery inclut un plugin sur github
la source
Pour insérer le contenu du fichier nommé:
la source
La réponse d'Athari (la première!) Était trop concluante! Très bon!
Mais si vous souhaitez passer le nom de la page à inclure comme paramètre d'URL , ce message a une très bonne solution à utiliser en combinaison avec:
http://www.jquerybyexample.net/2012/06/get-url-parameters-using-jquery.html
Cela devient donc quelque chose comme ceci:
Votre URL:
Le code a.html devient maintenant:
Cela a très bien fonctionné pour moi! J'espère avoir aidé :)
la source
html5rocks.com a un très bon tutoriel sur ce genre de choses, et cela pourrait être un peu tard, mais je ne savais pas moi-même que cela existait. w3schools a également un moyen de le faire en utilisant sa nouvelle bibliothèque appelée w3.js. Le fait est que cela nécessite l'utilisation d'un serveur Web et d'un objet HTTPRequest. Vous ne pouvez pas réellement les charger localement et les tester sur votre machine. Ce que vous pouvez faire cependant, utilisez les polyfills fournis sur le lien html5rocks en haut, ou suivez leur tutoriel. Avec un peu de magie JS, vous pouvez faire quelque chose comme ceci:
Cela rendra le lien (peut devenir l'élément de lien souhaité s'il est déjà défini), définir l'importation (sauf si vous l'avez déjà), puis l'ajouter. Il va ensuite prendre cela et analyser le fichier en HTML, puis l'ajouter à l'élément souhaité sous une div. Tout cela peut être modifié pour s'adapter à vos besoins, de l'élément ajouté au lien que vous utilisez. J'espère que cela a aidé, cela peut ne plus être pertinent maintenant si des moyens plus récents et plus rapides sont sortis sans utiliser de bibliothèques et de cadres tels que jQuery ou W3.js.
MISE À JOUR: Cela générera une erreur indiquant que l'importation locale a été bloquée par la stratégie CORS. Peut avoir besoin d'accéder au web profond pour pouvoir l'utiliser en raison des propriétés du web profond. (Ce qui signifie pas d'utilisation pratique)
la source
Voici mon approche en utilisant l'API Fetch et la fonction asynchrone
la source
Il n'y a pas de solution HTML directe pour la tâche pour l'instant. Même les importations HTML (qui sont en permanence en version préliminaire ) ne feront pas l'affaire, car Import! = Include et un peu de magie JS seront de toute façon nécessaires.
J'ai récemment écrit un script VanillaJS qui est juste pour l'inclusion de HTML dans HTML, sans aucune complication.
Il suffit de placer dans votre
a.html
C'est
open-source
et peut donner une idée (j'espère)la source
Vous pouvez le faire avec la bibliothèque jQuery de JavaScript comme ceci:
HTML:
JS:
Veuillez noter qu'il
banner.html
doit se trouver sous le même domaine que vos autres pages, sinon vos pages Web refuseront lebanner.html
fichier en raison des politiques de partage des ressources d'origine croisée .Veuillez également noter que si vous chargez votre contenu avec JavaScript, Google ne pourra pas l'indexer, ce n'est donc pas exactement une bonne méthode pour des raisons de référencement.
la source
Avez-vous essayé une injection iFrame?
Il injecte l'iFrame dans le document et se supprime (il est censé être alors dans le DOM HTML)
<iframe src="header.html" onload="this.before((this.contentDocument.body||this.contentDocument).children[0]);this.remove()"></iframe>
Cordialement
la source
Je suis venu sur ce sujet à la recherche de quelque chose de similaire, mais un peu différent du problème posé par lolo. Je voulais construire une page HTML contenant un menu alphabétique de liens vers d'autres pages, et chacune des autres pages pourrait ou non exister, et l'ordre dans lequel elles ont été créées pourrait ne pas être alphabétique (ni même numérique). De plus, comme Tafkadasoh, je ne voulais pas gonfler la page Web avec jQuery. Après avoir étudié le problème et expérimenté pendant plusieurs heures, voici ce qui a fonctionné pour moi, avec des remarques pertinentes ajoutées:
la source
Voici un excellent article , vous pouvez implémenter une bibliothèque commune et utiliser simplement le code ci-dessous pour importer tous les fichiers HTML sur une seule ligne.
Vous pouvez également essayer Google Polymer
la source
Utiliser des backticks ES6 ``: modèles littéraux !
De cette façon, nous pouvons inclure du HTML sans coder les guillemets, inclure des variables du DOM, etc.
C'est un puissant moteur de création de modèles, nous pouvons utiliser des fichiers js séparés et utiliser des événements pour charger le contenu en place, ou même tout séparer en morceaux et appeler à la demande:
https://caniuse.com/#feat=template-literals
la source
javascript
badge en tant que programmeur amateur jusque-là.Pour que la solution fonctionne, vous devez inclure le fichier csi.min.js, que vous pouvez trouver ici .
Selon l'exemple illustré sur GitHub, pour utiliser cette bibliothèque, vous devez inclure le fichier csi.js dans votre en-tête de page, puis vous devez ajouter l'attribut data-include avec sa valeur définie au fichier que vous souhaitez inclure, sur le conteneur élément.
Masquer le code de copie
... J'espère que cela aide.
la source
PHP est un langage de script au niveau du serveur. Il peut faire beaucoup de choses, mais une utilisation populaire consiste à inclure des documents HTML dans vos pages, de la même manière que SSI. Comme SSI, il s'agit d'une technologie de niveau serveur. Si vous n'êtes pas sûr d'avoir des fonctionnalités PHP sur votre site Web, contactez votre hébergeur.
Voici un script PHP simple que vous pouvez utiliser pour inclure un extrait de code HTML sur n'importe quelle page Web compatible PHP:
Enregistrez le code HTML des éléments communs de votre site dans des fichiers séparés. Par exemple, votre section de navigation peut être enregistrée sous navigation.html ou navigation.php. Utilisez le code PHP suivant pour inclure ce code HTML dans chaque page.
Utilisez ce même code sur chaque page que vous souhaitez inclure le fichier. Assurez-vous de changer le nom de fichier en surbrillance par le nom et le chemin d'accès à votre fichier d'inclusion.
la source
Si vous utilisez un framework comme django / bootle, ils livrent souvent un moteur de template. Disons que vous utilisez une bouteille et que le moteur de modèle par défaut est SimpleTemplate Engine . Et ci-dessous est le fichier html pur
Vous pouvez inclure le footer.tpl dans votre fichier principal, comme:
En plus de cela, vous pouvez également passer des paramètres à votre dashborard.tpl.
la source
Sur la base de la réponse de https://stackoverflow.com/a/31837264/4360308, j'ai implémenté cette fonctionnalité avec Nodejs (+ express + cheerio) comme suit:
HTML (index.html)
JS
ajouter -> inclut le contenu dans le div
replace -> remplace le div
vous pourriez facilement ajouter plus de comportements suivant la même conception
la source