У меня есть 2 HTML файлы, предположим , что a.html
и b.html
. В a.html
хочу включить b.html
.
В JSF я могу сделать это так:
<ui:include src="b.xhtml" />
Это значит, что внутри a.xhtml
файла я могу включить b.xhtml
.
Как мы можем сделать это в *.html
файле?
javascript
html
include
Лоло
источник
источник
localhost
: stackoverflow.com/questions/7542872/…Ответы:
На мой взгляд, лучшее решение использует jQuery:
a.html
:b.html
:Этот метод является простым и чистым решением моей проблемы.
Документация по jQuery
.load()
находится здесь .источник
$(function(){})
будет выполняться только после окончания загрузки документа.XMLHttpRequest cannot load file:///.../b.html. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
Расширяя ответ lolo сверху, мы добавим немного больше автоматизации, если вам нужно включить много файлов:
А затем включить что-то в HTML:
Который будет включать в себя файлы views / header.html и views / footer.html
источник
data-argument
и получить его во включенном файле?$("#postdiv").load('posts.php?name=Test&age=25');
class="include"
- просто сделайте свой селектор jQueryvar includes = $('[data-include]');
Мое решение похоже на одну из Лоло выше. Тем не менее, я вставляю HTML-код через JavaScript document.write вместо использования jQuery:
a.html:
b.js:
Причина, по которой я против использования jQuery, заключается в том, что размер файла jQuery.js составляет ~ 90 КБ, и я хочу, чтобы объем загружаемых данных был как можно меньшим.
Чтобы получить правильно экранированный файл JavaScript без особых усилий, вы можете использовать следующую команду sed:
Или просто используйте следующий удобный скрипт bash, опубликованный как Gist на Github, который автоматизирует всю необходимую работу, конвертируя
b.html
вb.js
: https://gist.github.com/Tafkadasoh/334881e18cbb7fc2a5c033bfa03f6ee6Благодарность Грегу Миншаллу за улучшенную команду sed, которая также избегает обратной косой черты и одинарных кавычек, которые моя первоначальная команда sed не учитывала.
В качестве альтернативы для браузеров, которые поддерживают литералы шаблона, также работает следующее:
b.js:
источник
'
пометок в нем. Если вы просто выполняете поиск / замену, чтобы заменить` with
\ `THEN, найти / заменить, чтобы заменить'
на \\'
и новые строки на` `новые строки, это будет работать нормально.`
- тогда вы сможете вставлять выражения, как${var}
- вам нужно только бежать\`
и\$
Оформить заказ импорта HTML5 с помощью учебника Html5rocks и проекта Polymer
Например:
источник
stuff.html
доступен только в качестве шаблона на родительской странице, но вам придется использовать сценарии для создания клонов его DOM на родительской странице, чтобы они были видны пользователю.TypeError: ... .import is undefined
. MDN говорит: «В настоящее время эта функция не реализована ни в одном браузере». Кто-нибудь знает, возможно ли построить FF с этой функцией?Бесстыдная заглушка библиотеки, которую я написал, решает эту проблему.
https://github.com/LexmarkWeb/csi.js
Выше будет взять содержимое
/path/to/include.html
и заменитьdiv
его.источник
<div data-include="/path/to/include.html"></div>
. Этот инструмент упрощает создание простого многостраничного макета без плагинов.Простая серверная директива include для включения другого файла, найденного в той же папке, выглядит следующим образом:
источник
<!--#include file="a.html" -->
а такжеНет необходимости в скриптах. Нет необходимости делать какие-то навороченные вещи на стороне сервера (хотя это, вероятно, будет лучшим вариантом)
Поскольку старые браузеры не поддерживают бесшовные, вы должны добавить некоторые CSS, чтобы исправить это:
Имейте в виду, что для браузеров, которые не поддерживают бесшовные, если вы нажмете на ссылку в iframe, это заставит фрейм перейти на этот URL, а не на все окно. Чтобы обойти все ссылки, нужно
target="_parent"
, чтобы поддержка браузера была «достаточно хорошей».источник
seamless
Атрибут был удален из HTML проекта он пришел. Не используйте это.Очень старое решение я встретил мои потребности тогда, но вот как это сделать соответствующий стандартам код:
источник
<object>
,<embed>
и<iframe>
все работают, но во всех трех случаях они создают отдельные документы с собственными стайлинга и сценариев контекстов (IFrame в частности , включает уродливые границы и полосы прокрутки), и, например , любые ссылки открытыми по умолчанию в них , а не на родительская страница (хотя это можно переопределить с помощью target = "_ parent"). Из всех этих, iframe - единственная, у которой есть надежда стать более интегрированной с помощьюseamless
атрибута HTML5 (упомянутого bjb568), но он пока не очень хорошо поддерживается: caniuse.com/#feat=iframe-seamlessseamless
атрибуте) является единственной устаревшей частью - остальное все еще применяется.В качестве альтернативы, если у вас есть доступ к файлу .htaccess на вашем сервере, вы можете добавить простую директиву, которая позволит интерпретировать php для файлов, заканчивающихся расширением .html.
Теперь вы можете использовать простой PHP-скрипт для включения других файлов, таких как:
источник
.htaccess
может привести к тому, чтоhtml
страницы будут пытаться загружаться в виде файлов, а не в браузере. Проверьте сначала. Отказ от ответственности: это только что произошло со мной, когда я попробовал вышеуказанное решение. Мой.htaccess
был пуст за исключением двух строк выше. Предостережение рекомендуется. Попробуйте использоватьlolo
решение jQuery (ниже).Если требуется включить html-контент из какого-либо файла, выполните следующие действия: Например, следующая строка будет содержать содержимое piece_to_include.html в месте, где происходит определение OBJECT.
Ссылка: http://www.w3.org/TR/WD-html40-970708/struct/includes.html#h-7.7.4
источник
Вот мое решение на месте:
источник
В w3.js include работает так:
Для правильного описания посмотрите на это: https://www.w3schools.com/howto/howto_html_include.asp
источник
Это то, что помогло мне. Для добавления блока HTML-кода из
b.html
вa.html
, это должно идти вhead
тегеa.html
:Затем в теге body создается контейнер с уникальным идентификатором и блоком javascript для загрузки
b.html
в контейнер следующим образом:источник
Я знаю, что это очень старый пост, поэтому некоторые методы не были доступны тогда. Но вот мой очень простой взгляд на это (основываясь на ответе Лоло).
Он опирается на атрибуты data- * HTML5 и, следовательно, очень универсален в том смысле, что использует функцию jQuery for-each для получения каждого .class, соответствующего «load-html», и использует соответствующий ему атрибут «data-source» для загрузки содержимого:
источник
Вы можете использовать полизаполнение HTML Imports ( https://www.html5rocks.com/en/tutorials/webcomponents/imports/ ) или это упрощенное решение https://github.com/dsheiko/html-import
Например, на странице вы импортируете HTML-блок следующим образом:
Блок может иметь собственный импорт:
Импортер заменяет директиву загруженным HTML почти так же, как SSI
Эти директивы будут обслуживаться автоматически, как только вы загрузите этот небольшой JavaScript:
Он будет обрабатывать импорт, когда DOM будет готов автоматически. Кроме того, он предоставляет API, который вы можете использовать для запуска вручную, для получения журналов и так далее. Наслаждаться :)
источник
script async src
кажется. Опробовать это!Большинство решений работает, но у них есть проблема с jquery :
Проблема заключается в том, что следующий код
$(document).ready(function () { alert($("#includedContent").text()); }
ничего не предупреждает, а не включает включенный контентЯ пишу код ниже, в моем решении вы можете получить доступ к включенному контенту в
$(document).ready
функции:(Ключ загружает включенный контент синхронно).
index.htm :
include.inc :
JQuery включает плагин на GitHub
источник
Чтобы вставить содержимое именованного файла:
источник
Ответ Athari (первый!) Был слишком убедительным! Отлично!
Но если вы хотите передать имя страницы для включения в качестве параметра URL , этот пост имеет очень хорошее решение для использования в сочетании с:
http://www.jquerybyexample.net/2012/06/get-url-parameters-using-jquery.html
Так это становится примерно так:
Ваш URL:
Код a.html теперь становится:
Это сработало очень хорошо для меня! Надеюсь помогло :)
источник
На html5rocks.com есть очень хороший учебник по этому материалу, и это может быть немного поздно, но я сам не знал, что это существовало. У w3schools также есть способ сделать это, используя новую библиотеку w3.js. Дело в том, что это требует использования веб-сервера и объекта HTTPRequest. Вы не можете на самом деле загрузить их локально и проверить их на своей машине. Тем не менее, вы можете использовать полифилы, указанные в ссылке html5rocks вверху, или следовать их руководству. Немного волшебства JS, вы можете сделать что-то вроде этого:
Это создаст ссылку (может измениться на требуемый элемент ссылки, если он уже установлен), установить импорт (если он у вас еще не установлен), а затем добавить его. Затем он возьмет это и проанализирует файл в HTML, а затем добавит его к нужному элементу в div. Все это можно изменить в соответствии с вашими потребностями, начиная с добавляемого элемента и заканчивая ссылкой, которую вы используете. Я надеюсь, что это помогло, теперь это может не иметь значения, если появятся более новые и более быстрые способы без использования библиотек и сред, таких как jQuery или W3.js.
ОБНОВЛЕНИЕ: Это выдаст ошибку, говорящую, что локальный импорт был заблокирован политикой CORS. Может потребоваться доступ к Deep Web, чтобы иметь возможность использовать это из-за свойств Deep Web. (Не имеет практического смысла)
источник
Вот мой подход с использованием Fetch API и асинхронной функции
источник
Прямого HTML-решения для этой задачи пока нет. Даже HTML-импорт (который постоянно находится в черновике ) не сработает, потому что Import! = Include, и в любом случае потребуется некоторое волшебство JS.
Я недавно написал в VanillaJS сценарий , который как раз для включения HTML в HTML, без каких - либо осложнений.
Просто поместите в свой
a.html
Это
open-source
и может дать представление (я надеюсь)источник
Вы можете сделать это с помощью библиотеки JavaScript jQuery следующим образом:
HTML:
JS:
Обратите внимание, что они
banner.html
должны находиться в том же домене, в котором находятся другие ваши страницы, в противном случае ваши веб-страницы будут отклонятьbanner.html
файл в соответствии с политиками общего доступа к ресурсам .Также обратите внимание, что если вы загрузите свой контент с помощью JavaScript, Google не сможет проиндексировать его, поэтому это не совсем хороший метод по причинам SEO.
источник
Вы пробовали инъекцию iFrame?
Он внедряет iFrame в документ и удаляет себя (он должен быть в HTML DOM)
<iframe src="header.html" onload="this.before((this.contentDocument.body||this.contentDocument).children[0]);this.remove()"></iframe>
С уважением
источник
Я пришел в эту тему в поисках чего-то похожего, но немного отличного от проблемы, поставленной lolo. Я хотел создать страницу HTML, содержащую алфавитное меню ссылок на другие страницы, и каждая из других страниц могла бы существовать или не существовать, и порядок их создания может быть не алфавитным (и даже не числовым). Также, как и Tafkadasoh, я не хотел раздувать веб-страницу с помощью jQuery. После изучения проблемы и экспериментов в течение нескольких часов, вот что сработало для меня, с соответствующими замечаниями:
источник
Вот отличная статья. Вы можете реализовать общую библиотеку и просто использовать приведенный ниже код для импорта любых HTML-файлов в одну строку.
Вы также можете попробовать Google Polymer
источник
Использование обратных ссылок ES6 ``: литералы шаблона !
Таким образом, мы можем включить HTML без кавычек, включить переменные из DOM и так далее.
Это мощный движок шаблонов, мы можем использовать отдельные js-файлы и использовать события для загрузки содержимого на месте или даже для разделения всего на куски и вызова по требованию:
https://caniuse.com/#feat=template-literals
источник
javascript
значок как программист-хобби.Чтобы заставить решение работать, вам нужно включить файл csi.min.js, который вы можете найти здесь .
Согласно примеру, показанному на GitHub, чтобы использовать эту библиотеку, вы должны включить файл csi.js в заголовок своей страницы, затем вам нужно добавить атрибут data-include с его значением, установленным в файл, который вы хотите включить, в контейнер элемент.
Скрыть копию кода
... Надеюсь, поможет.
источник
PHP - это язык сценариев на уровне сервера. Он может делать много вещей, но одним из популярных способов использования является включение документов HTML в ваши страницы, почти так же, как SSI. Как и SSI, это технология уровня сервера. Если вы не уверены, что у вас есть функциональность PHP на вашем веб-сайте, свяжитесь с вашим хостинг-провайдером.
Вот простой скрипт PHP, который вы можете использовать для включения фрагмента HTML на любую веб-страницу с поддержкой PHP:
Сохраните HTML для общих элементов вашего сайта в отдельных файлах. Например, ваш раздел навигации может быть сохранен как navigation.html или navigation.php. Используйте следующий код PHP, чтобы включить этот HTML на каждой странице.
Используйте тот же код на каждой странице, которую вы хотите включить в файл. Обязательно измените выделенное имя файла на имя и путь к включаемому файлу.
источник
Если вы используете какой-то фреймворк, такой как django / bootle, они часто поставляют какой-то шаблонизатор. Допустим, вы используете бутылку, и механизм шаблонов по умолчанию - SimpleTemplate Engine . И ниже чистый HTML-файл
Вы можете включить footer.tpl в ваш основной файл, например:
Кроме того, вы также можете передать параметр в ваш dashborard.tpl.
источник
Основываясь на ответе https://stackoverflow.com/a/31837264/4360308, я реализовал эту функцию с помощью Nodejs (+ express + cheerio) следующим образом:
HTML (index.html)
JS
append -> включает содержимое в div
заменить -> заменяет div
Вы можете легко добавить больше поведения, следуя тому же дизайну
источник