Итак, после долгого времени я действительно нашел способ сделайте это с помощью AJAX. Импорт HTML - отличное решение, но поддержка в браузерах сильно не хватает по состоянию на 04/2017, поэтому я придумал лучшее решение. Вот мой исходный код:
function HTMLImporter() {}
HTMLImporter.import = function(url) {
var error, http_request, load, script;
script = document.currentScript || document.scripts[document.scripts.length - 1];
load = function(event) {
var attribute, index, index1, new_script, old_script, scripts, wrapper;
wrapper = document.createElement("div");
wrapper.innerHTML = this.responseText;
scripts = wrapper.getElementsByTagName("SCRIPT");
for (index = scripts.length - 1; index > -1; -- index) {
old_script = scripts[index];
new_script = document.createElement("script");
new_script.innerHTML = old_script.innerHTML;
for (index1 = old_script.attributes.length - 1; index1 > -1; -- index1) {
attribute = old_script.attributes[index1];
new_script.setAttribute(attribute.name, attribute.value);
}
old_script.parentNode.replaceChild(new_script, old_script);
}
while(wrapper.firstChild) {
script.parentNode.insertBefore(wrapper.removeChild(wrapper.firstChild), script);
}
script.parentNode.removeChild(script);
this.removeEventListener("error", error);
this.removeEventListener("load", load);
};
error = function(event) {
this.removeEventListener("error", error);
this.removeEventListener("load", load);
alert("there was an error!");
};
http_request = new XMLHttpRequest();
http_request.addEventListener("error", error);
http_request.addEventListener("load", load);
http_request.open("GET", url);
http_request.send();
};
Теперь, когда я хочу, чтобы импортировать HTML в другой документ, все, что нужно сделать, это добавить тег сценария, как это:
<script>HTMLImporter.import("my-template.html");</script>
Моя функция будет на самом деле заменить скрипт тег, используемый для вызова импорта с содержимым my-template.html
, и он выполнит любые скрипты, найденные в шаблоне. Для шаблона не требуется специальный формат, просто напишите HTML-код, который вы хотите отобразить в коде.
не с чистым html. Но большинство языков на стороне сервера поддерживает некоторый тип *** include ***. На какой сервер вы будете размещать свой сайт? (* вы могли бы также использовать JS для этого, но это не было бы поисковой системой *) –
Вы можете сделать эту клиентскую сторону, используя библиотеку шаблонов, такую как 'Underscore.js' - см. ссылку здесь: - http: // underscorejs .org/ – aphextwix
underscorejs - это слишком большой для чего-то подобного простой запрос ajax ... В jquery, который будет выглядеть так: '' $ .get ("header.htm", function (data) {$ (" #header "). html (data);});' ' – seahorsepip