Tengo 2 archivos HTML, supongamos a.html
y b.html
. En a.html
quiero incluir b.html
.
En JSF puedo hacerlo así:
<ui:include src="b.xhtml" />
Significa que dentro del a.xhtml
archivo, puedo incluir b.xhtml
.
¿Cómo podemos hacerlo en el *.html
archivo?
javascript
html
include
lolo
fuente
fuente
localhost
: stackoverflow.com/questions/7542872/…Respuestas:
En mi opinión, la mejor solución utiliza jQuery:
a.html
:b.html
:Este método es una solución simple y limpia para mi problema.
La
.load()
documentación de jQuery está aquí .fuente
$(function(){})
solo se ejecutará cuando el documento termine de cargarse.XMLHttpRequest cannot load file:///.../b.html. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
Ampliando la respuesta de lolo desde arriba, aquí hay un poco más de automatización si tiene que incluir muchos archivos:
Y luego incluir algo en el html:
Que incluiría el archivo views / header.html y views / footer.html
fuente
data-argument
y recuperarlo en el archivo incluido?$("#postdiv").load('posts.php?name=Test&age=25');
class="include"
- solo haga su selector jQueryvar includes = $('[data-include]');
Mi solución es similar a la de lolo anterior. Sin embargo, inserto el código HTML a través de document.write de JavaScript en lugar de usar jQuery:
a.html:
b.js:
La razón por la que no uso jQuery es que jQuery.js tiene un tamaño de ~ 90 kb, y quiero mantener la cantidad de datos para cargar lo más pequeña posible.
Para obtener el archivo JavaScript escapado correctamente sin mucho trabajo, puede usar el siguiente comando sed:
O simplemente use el siguiente script práctico de bash publicado como Gist en Github, que automatiza todo el trabajo necesario, convirtiéndolo
b.html
ab.js
: https://gist.github.com/Tafkadasoh/334881e18cbb7fc2a5c033bfa03f6ee6Créditos a Greg Minshall por el comando sed mejorado que también escapa a las barras diagonales y comillas simples, que mi comando sed original no consideró.
Alternativamente, para los navegadores que admiten literales de plantilla, lo siguiente también funciona:
b.js:
fuente
'
marcas. Si solo hace una búsqueda / reemplazo para reemplazar` with
\ `ENTONCES, busque / reemplace para reemplazar'
con\'
y new-lines con` `new-lines, funcionará bien.`
; luego puede insertar expresiones como${var}
: solo necesita escapar\`
y\$
Verifique las importaciones HTML5 a través del tutorial Html5rocks y en el proyecto de polímero
Por ejemplo:
fuente
stuff.html
disponible como plantilla dentro de la página principal, pero tendría que usar secuencias de comandos para crear clones de su DOM en la página principal para que sean visibles para el usuario.TypeError: ... .import is undefined
. MDN dice "Esta característica no está implementada en ningún navegador de forma nativa en este momento". ¿Alguien sabe si es posible construir FF con esta característica?Plug descarado de una biblioteca que escribí para resolver esto.
https://github.com/LexmarkWeb/csi.js
Lo anterior tomará el contenido
/path/to/include.html
y lo reemplazarádiv
con él.fuente
<div data-include="/path/to/include.html"></div>
. Esta herramienta hace que sea más fácil hacer una maqueta simple de varias páginas sin plugin de una manera limpia.Una directiva de inclusión del lado del servidor simple para incluir otro archivo encontrado en la misma carpeta se ve así:
fuente
<!--#include file="a.html" -->
tambiénNo hay necesidad de guiones. No es necesario hacer nada sofisticado en el lado del servidor (aunque probablemente sea una mejor opción)
Dado que los navegadores antiguos no son compatibles, debe agregar algunos CSS para solucionarlo:
Tenga en cuenta que para los navegadores que no son compatibles, si hace clic en un enlace en el iframe, el marco irá a esa URL, no a toda la ventana. Una forma de evitarlo es tener todos los enlaces
target="_parent"
, aunque el soporte del navegador es "suficientemente bueno".fuente
seamless
atributo se ha eliminado del borrador HTML del que proviene. No lo usesUna solución muy antigua que satisfacía mis necesidades en aquel entonces, pero he aquí cómo hacerlo con un código que cumpla con los estándares:
fuente
<object>
,<embed>
y<iframe>
todo el trabajo para esto, pero en los tres casos que crear documentos separados con sus propias estilo de scripting y contextos (iframe particular incluye fronteras feos y barras de desplazamiento), y por ejemplo los enlaces por abierta por defecto dentro de ellos y no en el página principal (aunque esto se puede anular con target = "_ parent"). De todos estos, el iframe es el único que tiene la esperanza de integrarse más a través delseamless
atributo HTML5 (mencionado por bjb568), pero aún no está bien soportado: caniuse.com/#feat=iframe-seamlessseamless
atributo) es la única parte desactualizada; el resto aún se aplica.Como alternativa, si tiene acceso al archivo .htaccess en su servidor, puede agregar una directiva simple que permita interpretar php en los archivos que terminan en la extensión .html.
Ahora puede usar un script php simple para incluir otros archivos como:
fuente
.htaccess
puede hacer que lashtml
páginas intenten descargarse como archivos en lugar de verlas en el navegador. Prueba primero. Descargo de responsabilidad: Eso me acaba de pasar cuando probé la solución anterior. Mi.htaccess
estaba vacío, excepto por encima de las dos líneas. Precaución aconsejada. Pruebelolo
la solución jQuery (a continuación) en su lugar.Lo siguiente funciona si el contenido html de algún archivo necesita ser incluido: Por ejemplo, la siguiente línea incluirá el contenido de piece_to_include.html en la ubicación donde se produce la definición de OBJETO.
Referencia: http://www.w3.org/TR/WD-html40-970708/struct/includes.html#h-7.7.4
fuente
Aquí está mi solución en el lugar:
fuente
En w3.js incluye trabajos como este:
Para una descripción adecuada, mire esto: https://www.w3schools.com/howto/howto_html_include.asp
fuente
Esto es lo que me ayudó. Para agregar un bloque de código html de
b.html
aa.html
, esto debería ir en lahead
etiqueta dea.html
:Luego, en la etiqueta del cuerpo, se crea un contenedor con una identificación única y un bloque javascript para cargarlo
b.html
en el contenedor, de la siguiente manera:fuente
Sé que esta es una publicación muy antigua, por lo que algunos métodos no estaban disponibles en ese momento. Pero aquí está mi opinión muy simple (basada en la respuesta de Lolo).
Se basa en los atributos de datos * de HTML5 y, por lo tanto, es muy genérico, ya que utiliza la función for-each de jQuery para obtener cada clase.
fuente
Puede usar un polyfill de Importaciones HTML ( https://www.html5rocks.com/en/tutorials/webcomponents/imports/ ), o esa solución simplificada https://github.com/dsheiko/html-import
Por ejemplo, en la página importa bloque HTML como ese:
El bloque puede tener importaciones propias:
El importador reemplaza la directiva con el HTML cargado como SSI
Estas directivas se servirán automáticamente tan pronto como cargue este pequeño JavaScript:
Procesará las importaciones cuando DOM esté listo automáticamente. Además, expone una API que puede usar para ejecutarse manualmente, obtener registros, etc. Disfruta :)
fuente
script async src
que parece. ProbándoloLa mayoría de las soluciones funcionan pero tienen problemas con jquery :
El problema es seguir el código
$(document).ready(function () { alert($("#includedContent").text()); }
alertas de nada en lugar de alertar al contenido incluido.Escribo el siguiente código, en mi solución puede acceder al contenido incluido en
$(document).ready
función:(La clave está cargando el contenido incluido sincrónicamente).
index.htm :
include.inc :
jquery incluye plugin en github
fuente
Para insertar contenido del archivo nombrado:
fuente
¡La respuesta de Athari (la primera!) Fue demasiado concluyente! ¡Muy bien!
Pero si desea pasar el nombre de la página para que se incluya como parámetro de URL , esta publicación tiene una solución muy buena para combinar con:
http://www.jquerybyexample.net/2012/06/get-url-parameters-using-jquery.html
Entonces se convierte en algo como esto:
Su URL:
El código a.html ahora se convierte en:
¡Funcionó muy bien para mí! Espero haber ayudado :)
fuente
html5rocks.com tiene un muy buen tutorial sobre estas cosas, y esto podría ser un poco tarde, pero yo mismo no sabía que existía. w3schools también tiene una manera de hacer esto usando su nueva biblioteca llamada w3.js. La cuestión es que esto requiere el uso de un servidor web y un objeto HTTPRequest. En realidad, no puede cargarlos localmente y probarlos en su máquina. Sin embargo, lo que puede hacer es usar polyfills provistos en el enlace html5rocks en la parte superior, o seguir su tutorial. Con un poco de magia JS, puedes hacer algo como esto:
Esto hará que el enlace (puede cambiar para ser el elemento de enlace deseado si ya está configurado), establecer la importación (a menos que ya lo tenga) y luego agregarlo. Luego, a partir de ahí, tomará eso y analizará el archivo en HTML, y luego lo agregará al elemento deseado bajo un div. Todo esto se puede cambiar para adaptarse a sus necesidades desde el elemento adjunto hasta el enlace que está utilizando. Espero que esto haya ayudado, puede ser irrelevante ahora si han surgido formas más nuevas y más rápidas sin usar bibliotecas y marcos como jQuery o W3.js.
ACTUALIZACIÓN: Esto arrojará un error que indica que la importación local ha sido bloqueada por la política CORS. Es posible que necesite acceso a la web profunda para poder usar esto debido a las propiedades de la web profunda. (Es decir, sin uso práctico)
fuente
Aquí está mi enfoque usando Fetch API y función asíncrona
fuente
No hay una solución HTML directa para la tarea por ahora. Incluso las importaciones HTML (que está permanentemente en borrador ) no harán el trabajo, porque Importar = Incluir y se requerirá algo de magia JS de todos modos.
Recientemente escribí un script VanillaJS que es solo para incluir HTML en HTML, sin ninguna complicación.
Simplemente colóquelo en su
a.html
Es
open-source
y puede dar una idea (espero)fuente
Puede hacerlo con la biblioteca jQuery de JavaScript de esta manera:
HTML:
JS:
Tenga en cuenta que
banner.html
debe ubicarse en el mismo dominio en el que se encuentran sus otras páginas; de lo contrario, sus páginas web rechazarán elbanner.html
archivo debido a las políticas de intercambio de recursos de origen cruzado .Además, tenga en cuenta que si carga su contenido con JavaScript, Google no podrá indexarlo, por lo que no es exactamente un buen método por razones de SEO.
fuente
¿Probaste una inyección de iFrame?
Inyecta el iFrame en el documento y se elimina a sí mismo (se supone que debe estar en el DOM HTML)
<iframe src="header.html" onload="this.before((this.contentDocument.body||this.contentDocument).children[0]);this.remove()"></iframe>
Saludos
fuente
Llegué a este tema buscando algo similar, pero un poco diferente del problema planteado por lolo. Quería construir una página HTML con un menú alfabético de enlaces a otras páginas, y cada una de las otras páginas podría o no existir, y el orden en que se crearon podría no ser alfabético (ni siquiera numérico). Además, como Tafkadasoh, no quería hinchar la página web con jQuery. Después de investigar el problema y experimentar durante varias horas, esto es lo que funcionó para mí, con comentarios relevantes agregados:
fuente
Aquí hay un gran artículo , puede implementar una biblioteca común y simplemente usar el siguiente código para importar cualquier archivo HTML en una línea.
También puedes probar Google Polymer
fuente
Uso de backticks de ES6 ``: ¡ literales de plantilla !
De esta forma podemos incluir html sin comillas de codificación, incluir variables del DOM, etc.
Es un poderoso motor de plantillas, podemos usar archivos js separados y usar eventos para cargar el contenido en su lugar, o incluso separar todo en fragmentos y llamadas a pedido:
https://caniuse.com/#feat=template-literals
fuente
javascript
insignia como programador de pasatiempos hasta entonces.Para que la Solución funcione, debe incluir el archivo csi.min.js, que puede ubicar aquí .
Según el ejemplo que se muestra en GitHub, para usar esta biblioteca debe incluir el archivo csi.js en el encabezado de su página, luego debe agregar el atributo de inclusión de datos con su valor establecido en el archivo que desea incluir, en el contenedor elemento.
Ocultar código de copia
... Espero eso ayude.
fuente
PHP es un lenguaje de script de nivel de servidor. Puede hacer muchas cosas, pero un uso popular es incluir documentos HTML dentro de sus páginas, lo mismo que SSI. Al igual que SSI, esta es una tecnología de nivel de servidor. Si no está seguro de tener la funcionalidad PHP en su sitio web, póngase en contacto con su proveedor de alojamiento.
Aquí hay un script PHP simple que puede usar para incluir un fragmento de HTML en cualquier página web habilitada para PHP:
Guarde el HTML para los elementos comunes de su sitio para separar los archivos. Por ejemplo, su sección de navegación podría guardarse como navigation.html o navigation.php. Use el siguiente código PHP para incluir ese HTML en cada página.
Use el mismo código en cada página que desee incluir el archivo. Asegúrese de cambiar el nombre del archivo resaltado por el nombre y la ruta a su archivo de inclusión.
fuente
Si usa algún marco como django / bootle, a menudo envían algún motor de plantillas. Digamos que usa botella, y el motor de plantilla predeterminado es SimpleTemplate Engine . Y a continuación se muestra el archivo html puro
Puede incluir el footer.tpl en su archivo principal, como:
Además de eso, también puede pasar parámetros a su dashborard.tpl.
fuente
Basado en la respuesta de https://stackoverflow.com/a/31837264/4360308 , he implementado esta funcionalidad con Nodejs (+ express + cheerio) de la siguiente manera:
HTML (index.html)
JS
agregar -> incluye el contenido en el div
reemplazar -> reemplaza el div
fácilmente podría agregar más comportamientos siguiendo el mismo diseño
fuente