내가 가진 2 개 HTML 파일, 가정 a.html
및b.html
. 에 a.html
나는 포함 할 b.html
.
JSF에서는 다음과 같이 할 수 있습니다.
<ui:include src="b.xhtml" />
그것은 내부를 의미 a.xhtml
파일 포함 할 수b.xhtml
.
*.html
파일로 어떻게 할 수 있습니까?
localhost
: 그러나 : stackoverflow.com/questions/7542872/…
내가 가진 2 개 HTML 파일, 가정 a.html
및b.html
. 에 a.html
나는 포함 할 b.html
.
JSF에서는 다음과 같이 할 수 있습니다.
<ui:include src="b.xhtml" />
그것은 내부를 의미 a.xhtml
파일 포함 할 수b.xhtml
.
*.html
파일로 어떻게 할 수 있습니까?
localhost
: 그러나 : stackoverflow.com/questions/7542872/…
답변:
제 생각에는 최고의 솔루션은 jQuery를 사용합니다.
a.html
:
<html>
<head>
<script src="jquery.js"></script>
<script>
$(function(){
$("#includedContent").load("b.html");
});
</script>
</head>
<body>
<div id="includedContent"></div>
</body>
</html>
b.html
:
<p>This is my include file</p>
이 방법은 내 문제에 대한 간단하고 깨끗한 해결책입니다.
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의 답변을 확장하면 많은 파일을 포함 해야하는 경우 약간의 자동화가 있습니다.
<script>
$(function(){
var includes = $('[data-include]');
jQuery.each(includes, function(){
var file = 'views/' + $(this).data('include') + '.html';
$(this).load(file);
});
});
</script>
그런 다음 html에 무언가를 포함시킵니다.
<div data-include="header"></div>
<div data-include="footer"></div>
views / header.html 및 views / footer.html 파일이 포함됩니다
data-argument
포함 된 파일에서 다른 데이터 매개 변수를 통해 인수를 전달 하고 검색하는 방법이 있습니까?
$("#postdiv").load('posts.php?name=Test&age=25');
class="include"
- 당신의 jQuery를 선택하게var includes = $('[data-include]');
내 솔루션은 위 의 lolo 와 유사합니다 . 그러나 jQuery를 사용하는 대신 JavaScript의 document.write를 통해 HTML 코드를 삽입합니다.
a.html :
<html>
<body>
<h1>Put your HTML content before insertion of b.js.</h1>
...
<script src="b.js"></script>
...
<p>And whatever content you want afterwards.</p>
</body>
</html>
b.js :
document.write('\
\
<h1>Add your HTML code here</h1>\
\
<p>Notice however, that you have to escape LF's with a '\', just like\
demonstrated in this code listing.\
</p>\
\
');
jQuery를 사용하지 않는 이유는 jQuery.js의 크기가 ~ 90kb이므로 가능한 한 적은 양의 데이터를로드하고 싶습니다.
많은 작업없이 올바르게 이스케이프 된 JavaScript 파일을 얻으려면 다음 sed 명령을 사용할 수 있습니다.
sed 's/\\/\\\\/g;s/^.*$/&\\/g;s/'\''/\\'\''/g' b.html > escapedB.html
또는 Github에서 Gist로 게시 된 다음과 같은 편리한 bash 스크립트를 사용하면 필요한 모든 작업을 자동화 b.html
하여 b.js
다음으로 변환 할 수 있습니다 .
https://gist.github.com/Tafkadasoh/334881e18cbb7fc2a5c033bfa03f6ee6를
크레딧 그렉 Minshall 내 원래 나오지도 명령은 고려하지 않았다 또한 다시 슬래시와 따옴표를 이스케이프 개선 나오지 명령합니다.
또는 템플릿 리터럴 을 지원하는 브라우저의 경우 경우 다음도 작동합니다.
b.js :
document.write(`
<h1>Add your HTML code here</h1>
<p>Notice, you do not have to escape LF's with a '\',
like demonstrated in the above code listing.
</p>
`);
'
마크 없이 HTML에서 작동 합니다. 당신은 단지 발견 할 경우 / 교체 교체 ` with
THEN '\ 찾기 / 교체 교체 '
로 \'
그것을 잘 작동합니다``새 라인에 새로운 라인.
`
- 다음과 같은 식을 삽입 할 수있는 ${var}
당신 만 탈출해야 - \`
및\$
HTML5rocks 튜토리얼 및 폴리머 프로젝트 를 통한 HTML5 가져 오기 체크 아웃
예를 들면 다음과 같습니다.
<head>
<link rel="import" href="/path/to/imports/stuff.html">
</head>
stuff.html
사용할 수 있지만 사용자가 볼 수 있도록 스크립팅을 사용 하여 상위 페이지에서 DOM의 복제본 을 만들어야 합니다.
내가 작성한 라이브러리의 뻔뻔한 플러그가 이것을 해결합니다.
https://github.com/LexmarkWeb/csi.js
<div data-include="/path/to/include.html"></div>
위의 내용을 가져 와서 /path/to/include.html
대체합니다 div
.
<div data-include="/path/to/include.html"></div>
. 이 도구를 사용하면 간단한 비 플러그인 멀티 페이지 모형을 깔끔하게 만들 수 있습니다.
동일한 폴더에있는 다른 파일을 포함하는 간단한 서버 측 include 지시문은 다음과 같습니다.
<!--#include virtual="a.html" -->
<!--#include file="a.html" -->
뿐만 아니라
스크립트가 필요 없습니다. 서버 측에서 멋진 것을 할 필요가 없습니다 (아마도 더 나은 옵션 일 것입니다)
<iframe src="/path/to/file.html" seamless></iframe>
이전 브라우저는 완벽하게 지원하지 않으므로 CSS를 추가하여 수정해야합니다.
iframe[seamless] {
border: none;
}
완벽하게 지원하지 않는 브라우저의 경우 iframe에서 링크를 클릭하면 프레임 이 전체 창이 아닌 해당 URL로 이동합니다. 이 문제를 해결하는 방법은 모든 링크 target="_parent"
에 브라우저를 지원하는 것입니다.
아주 오래된 솔루션은 나는 다시 내 요구를 충족하지만, 여기에 표준을 준수하는 코드를 수행하는 방법 않았다
<!--[if IE]>
<object classid="clsid:25336920-03F9-11CF-8FD0-00AA00686F13" data="some.html">
<p>backup content</p>
</object>
<![endif]-->
<!--[if !IE]> <-->
<object type="text/html" data="some.html">
<p>backup content</p>
</object>
<!--> <![endif]-->
<object>
, <embed>
그리고 <iframe>
이 모든 작업을하지만, 세 가지 경우에 그들은 자신의 스타일과 스크립트 컨텍스트와 별도의 문서를 만들 그 안에 대신에 기본 개방으로하고, 예를 들어 어떤 링크 (iframe이 특히 추한 테두리와 스크롤바를 포함한다) 상위 페이지 (target = "_ parent"로 재정의 될 수 있음) 이 모든 것에서 iframe은 HTML5 seamless
속성 (bjb568에 의해 언급 됨)을 통해보다 통합 될 수있는 유일한 희망 이지만, 아직 잘 지원되지는 않습니다 : caniuse.com/#feat=iframe-seamless
seamless
속성 에 관한 )은 유일한 오래된 부분입니다. 나머지는 여전히 적용됩니다.
또는 서버의 .htaccess 파일에 액세스 할 수있는 경우 .html 확장자로 끝나는 파일에서 php를 해석 할 수있는 간단한 지시문을 추가 할 수 있습니다.
RemoveHandler .html
AddType application/x-httpd-php .php .html
이제 간단한 PHP 스크립트를 사용하여 다음과 같은 다른 파일을 포함 할 수 있습니다.
<?php include('b.html'); ?>
.htaccess
하면 html
페이지가 브라우저에서 보지 않고 파일로 다운로드 될 수 있습니다 . 먼저 테스트하십시오. 면책 조항 : 위의 해결책을 시도했을 때 지금 막 나에게 일어났습니다. 내는 .htaccess
위의 두 줄을 제외하고 비어 있었다. 주의를 기울여야합니다. lolo
대신의 jQuery 솔루션 (아래)을 사용해보십시오 .
일부 파일의 html 컨텐츠를 포함해야하는 경우 다음이 작동합니다. 예를 들어, 다음 행은 OBJECT 정의가 발생하는 위치에 piece_to_include.html의 컨텐츠를 포함합니다.
...text before...
<OBJECT data="file_to_include.html">
Warning: file_to_include.html could not be included.
</OBJECT>
...text after...
참조 : http://www.w3.org/TR/WD-html40-970708/struct/includes.html#h-7.7.4
여기 내 솔루션이 있습니다.
(() => {
const includes = document.getElementsByTagName('include');
[].forEach.call(includes, i => {
let filePath = i.getAttribute('src');
fetch(filePath).then(file => {
file.text().then(content => {
i.insertAdjacentHTML('afterend', content);
i.remove();
});
});
});
})();
<p>FOO</p>
<include src="a.html">Loading...</include>
<p>BAR</p>
<include src="b.html">Loading...</include>
<p>TEE</p>
w3.js에서 include는 다음과 같이 작동합니다.
<body>
<div w3-include-HTML="h1.html"></div>
<div w3-include-HTML="content.html"></div>
<script>w3.includeHTML();</script>
</body>
적절한 설명은 https://www.w3schools.com/howto/howto_html_include.asp를 참조하십시오.
이것이 나를 도왔습니다. 에서 HTML 코드 블록을 추가하려면 b.html
에 a.html
이은에 가야 head
의 태그 a.html
:
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
그런 다음 body 태그에서 컨테이너는 다음과 같이 고유 한 id와 javascript 블록 b.html
으로 만들어 컨테이너 에로드 됩니다.
<div id="b-placeholder">
</div>
<script>
$(function(){
$("#b-placeholder").load("b.html");
});
</script>
나는 이것이 매우 오래된 게시물임을 알고 있으므로 당시에는 일부 방법을 사용할 수 없었습니다. 그러나 여기에 매우 간단한 테이크가 있습니다 (Lolo의 답변을 기반으로 함).
HTML5 data- * 속성에 의존하므로 jQuery의 for-each 함수를 사용하여 "load-html"과 일치하는 모든 .class를 가져오고 각각의 'data-source'속성을 사용하여 컨텐츠를로드한다는 점에서 매우 일반적입니다.
<div class="container-fluid">
<div class="load-html" id="NavigationMenu" data-source="header.html"></div>
<div class="load-html" id="MainBody" data-source="body.html"></div>
<div class="load-html" id="Footer" data-source="footer.html"></div>
</div>
<script src="js/jquery.min.js"></script>
<script>
$(function () {
$(".load-html").each(function () {
$(this).load(this.dataset.source);
});
});
</script>
HTML 가져 오기 ( https://www.html5rocks.com/en/tutorials/webcomponents/imports/ ) 의 폴리 필을 사용 하거나 단순화 된 솔루션 https://github.com/dsheiko/html-import를 사용할 수 있습니다
예를 들어, 페이지에서 다음과 같은 HTML 블록을 가져옵니다.
<link rel="html-import" href="./some-path/block.html" >
블록 자체의 가져 오기가있을 수 있습니다.
<link rel="html-import" href="./some-other-path/other-block.html" >
임포터는 지시어를 SSI와 거의 비슷하게로드 된 HTML로 바꿉니다.
이 지시문은이 작은 JavaScript를로드하자마자 자동으로 제공됩니다.
<script async src="./src/html-import.js"></script>
DOM이 자동으로 준비되면 가져 오기를 처리합니다. 또한 수동으로 실행하고 로그를 얻는 데 사용할 수있는 API를 제공합니다. 즐겨 :)
script async src
것 같습니다. 그것을 시도!
대부분의 솔루션이 작동하지만 jquery에 문제가 있습니다. .
문제는 코드를 따르고 있습니다 $(document).ready(function () { alert($("#includedContent").text()); }
포함 된 내용을 경고하는 대신 아무것도 경고하지 않는 입니다.
아래 코드를 작성하면 내 솔루션에서 포함 된 콘텐츠에 액세스 할 수 있습니다. $(document).ready
.
(키는 포함 된 컨텐츠를 동 기적으로로드하고 있습니다).
index.htm :
<html>
<head>
<script src="jquery.js"></script>
<script>
(function ($) {
$.include = function (url) {
$.ajax({
url: url,
async: false,
success: function (result) {
document.write(result);
}
});
};
}(jQuery));
</script>
<script>
$(document).ready(function () {
alert($("#test").text());
});
</script>
</head>
<body>
<script>$.include("include.inc");</script>
</body>
</html>
include.inc :
<div id="test">
There is no issue between this solution and jquery.
</div>
아타리의 대답 (첫 번째!)은 너무 결정적이었습니다! 아주 좋아요!
그러나 URL 매개 변수로 포함 할 페이지 이름 을 전달하려면 이 게시물에 다음과 결합하여 사용할 수있는 매우 좋은 솔루션이 있습니다.
http://www.jquerybyexample.net/2012/06/get-url-parameters-using-jquery.html
따라서 다음과 같이됩니다.
귀하의 URL :
www.yoursite.com/a.html?p=b.html
a.html의 코드는 지금이된다 :
<html>
<head>
<script src="jquery.js"></script>
<script>
function GetURLParameter(sParam)
{
var sPageURL = window.location.search.substring(1);
var sURLVariables = sPageURL.split('&');
for (var i = 0; i < sURLVariables.length; i++)
{
var sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] == sParam)
{
return sParameterName[1];
}
}
}
$(function(){
var pinc = GetURLParameter('p');
$("#includedContent").load(pinc);
});
</script>
</head>
<body>
<div id="includedContent"></div>
</body>
</html>
그것은 나를 위해 아주 잘 작동했습니다! 나는 도움이되기를 바랍니다 :)
html5rocks.com 에는이 내용에 대한 매우 유용한 자습서가 있으며, 조금 늦었을 수도 있지만, 이것이 실제로 존재한다는 것을 몰랐습니다. 또한 w3schools는 w3.js라는 새로운 라이브러리를 사용하여이를 수행 할 수 있습니다. 문제는 웹 서버와 HTTPRequest 객체를 사용해야한다는 것입니다. 실제로 로컬에로드하여 컴퓨터에서 테스트 할 수는 없습니다. 당신이 할 수있는 일은 상단의 html5rocks 링크에 제공된 polyfill을 사용하거나 자습서를 따르는 것입니다. 약간의 JS 마술로 다음과 같이 할 수 있습니다.
var link = document.createElement('link');
if('import' in link){
//Run import code
link.setAttribute('rel','import');
link.setAttribute('href',importPath);
document.getElementsByTagName('head')[0].appendChild(link);
//Create a phantom element to append the import document text to
link = document.querySelector('link[rel="import"]');
var docText = document.createElement('div');
docText.innerHTML = link.import;
element.appendChild(docText.cloneNode(true));
} else {
//Imports aren't supported, so call polyfill
importPolyfill(importPath);
}
이렇게하면 링크 (이미 설정된 경우 원하는 링크 요소로 변경할 수 있음)를 가져오고 가져 오기를 설정 한 다음 (아직 가져 오지 않은 경우) 추가합니다. 그런 다음 거기에서 HTML로 파일을 구문 분석 한 다음 div 아래의 원하는 요소에 추가합니다. 추가 요소부터 사용중인 링크까지 필요에 맞게 모두 변경할 수 있습니다. jQuery 또는 W3.js와 같은 라이브러리와 프레임 워크를 사용하지 않고 더 빠르고 새로운 방법이 나오면 이것이 도움이되기를 바랍니다.
업데이트 : CORS 정책에 의해 로컬 가져 오기가 차단되었다는 오류가 발생합니다. 딥 웹의 속성으로 인해 딥 웹에 액세스하려면 딥 웹에 액세스해야 할 수도 있습니다. (실용 없음을 의미)
Fetch API 및 비동기 함수를 사용하는 접근 방식은 다음과 같습니다.
<div class="js-component" data-name="header" data-ext="html"></div>
<div class="js-component" data-name="footer" data-ext="html"></div>
<script>
const components = document.querySelectorAll('.js-component')
const loadComponent = async c => {
const { name, ext } = c.dataset
const response = await fetch(`${name}.${ext}`)
const html = await response.text()
c.innerHTML = html
}
[...components].forEach(loadComponent)
</script>
현재 작업에 직접적인 HTML 솔루션은 없습니다. Import! = Include 및 일부 JS 마술이 필요하기 때문에 HTML Imports (임시 로 초안 인 ) 조차도 작동 하지 않습니다.
최근에 HTML에 HTML을 포함시키기위한 VanillaJS 스크립트 를 작성 했습니다 .
당신의 장소에 a.html
<link data-wi-src="b.html" />
<!-- ... and somewhere below is ref to the script ... -->
<script src="wm-html-include.js"> </script>
그것은 open-source
아이디어를 줄 수 있고 (나는 희망한다)
JavaScript 라이브러리 jQuery를 사용하여 다음과 같이 할 수 있습니다.
HTML :
<div class="banner" title="banner.html"></div>
JS :
$(".banner").each(function(){
var inc=$(this);
$.get(inc.attr("title"), function(data){
inc.replaceWith(data);
});
});
참고 banner.html
다른 페이지에있는 동일한 도메인 아래에 위치해야한다, 그렇지 않으면 웹 페이지는 거절 banner.html
로 인해 파일을 간 리소스 공유의 정책.
또한 자바 스크립트를 사용하여 콘텐츠를로드하는 경우 Google에서 색인을 생성 할 수 없으므로 검색 엔진 최적화 (SEO) 이유로 좋은 방법이 아닙니다.
나는이 주제와 비슷한 것을 찾았지만 lolo가 제기 한 문제와 약간 다릅니다. 다른 페이지에 대한 알파벳순 링크 메뉴를 포함하는 HTML 페이지를 구성하고 싶었고 다른 페이지 각각이 존재하거나 존재하지 않을 수 있으며, 생성 된 순서가 알파벳순이 아니거나 숫자가 아닐 수도 있습니다. 또한 Tafkadasoh와 마찬가지로 jQuery로 웹 페이지를 부풀리고 싶지 않았습니다. 문제를 연구하고 몇 시간 동안 실험 한 후 다음과 같은 관련 설명이 추가되어 저에게 효과적이었습니다.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/application/html; charset=iso-8859-1">
<meta name="Author" content="me">
<meta copyright="Copyright" content= "(C) 2013-present by me" />
<title>Menu</title>
<script type="text/javascript">
<!--
var F000, F001, F002, F003, F004, F005, F006, F007, F008, F009,
F010, F011, F012, F013, F014, F015, F016, F017, F018, F019;
var dat = new Array();
var form, script, write, str, tmp, dtno, indx, unde;
/*
The "F000" and similar variables need to exist/be-declared.
Each one will be associated with a different menu item,
so decide on how many items maximum you are likely to need,
when constructing that listing of them. Here, there are 20.
*/
function initialize()
{ window.name="Menu";
form = document.getElementById('MENU');
for(indx=0; indx<20; indx++)
{ str = "00" + indx;
tmp = str.length - 3;
str = str.substr(tmp);
script = document.createElement('script');
script.type = 'text/javascript';
script.src = str + ".js";
form.appendChild(script);
}
/*
The for() loop constructs some <script> objects
and associates each one with a different simple file name,
starting with "000.js" and, here, going up to "019.js".
It won't matter which of those files exist or not.
However, for each menu item you want to display on this
page, you will need to ensure that its .js file does exist.
The short function below (inside HTML comment-block) is,
generically, what the content of each one of the .js files looks like:
<!--
function F000()
{ return ["Menu Item Name", "./URLofFile.htm", "Description string"];
}
-->
(Continuing the remarks in the main menu.htm file)
It happens that each call of the form.appendChild() function
will cause the specified .js script-file to be loaded at that time.
However, it takes a bit of time for the JavaScript in the file
to be fully integrated into the web page, so one thing that I tried,
but it didn't work, was to write an "onload" event handler.
The handler was apparently being called before the just-loaded
JavaScript had actually become accessible.
Note that the name of the function in the .js file is the same as one
of the the pre-defined variables like "F000". When I tried to access
that function without declaring the variable, attempting to use an
"onload" event handler, the JavaScript debugger claimed that the item
was "not available". This is not something that can be tested-for!
However, "undefined" IS something that CAN be tested-for. Simply
declaring them to exist automatically makes all of them "undefined".
When the system finishes integrating a just-loaded .js script file,
the appropriate variable, like "F000", will become something other
than "undefined". Thus it doesn't matter which .js files exist or
not, because we can simply test all the "F000"-type variables, and
ignore the ones that are "undefined". More on that later.
The line below specifies a delay of 2 seconds, before any attempt
is made to access the scripts that were loaded. That DOES give the
system enough time to fully integrate them into the web page.
(If you have a really long list of menu items, or expect the page
to be loaded by an old/slow computer, a longer delay may be needed.)
*/
window.setTimeout("BuildMenu();", 2000);
return;
}
//So here is the function that gets called after the 2-second delay
function BuildMenu()
{ dtno = 0; //index-counter for the "dat" array
for(indx=0; indx<20; indx++)
{ str = "00" + indx;
tmp = str.length - 3;
str = "F" + str.substr(tmp);
tmp = eval(str);
if(tmp != unde) // "unde" is deliberately undefined, for this test
dat[dtno++] = eval(str + "()");
}
/*
The loop above simply tests each one of the "F000"-type variables, to
see if it is "undefined" or not. Any actually-defined variable holds
a short function (from the ".js" script-file as previously indicated).
We call the function to get some data for one menu item, and put that
data into an array named "dat".
Below, the array is sorted alphabetically (the default), and the
"dtno" variable lets us know exactly how many menu items we will
be working with. The loop that follows creates some "<span>" tags,
and the the "innerHTML" property of each one is set to become an
"anchor" or "<a>" tag, for a link to some other web page. A description
and a "<br />" tag gets included for each link. Finally, each new
<span> object is appended to the menu-page's "form" object, and thereby
ends up being inserted into the middle of the overall text on the page.
(For finer control of where you want to put text in a page, consider
placing something like this in the web page at an appropriate place,
as preparation:
<div id="InsertHere"></div>
You could then use document.getElementById("InsertHere") to get it into
a variable, for appending of <span> elements, the way a variable named
"form" was used in this example menu page.
Note: You don't have to specify the link in the same way I did
(the type of link specified here only works if JavaScript is enabled).
You are free to use the more-standard "<a>" tag with the "href"
property defined, if you wish. But whichever way you go,
you need to make sure that any pages being linked actually exist!
*/
dat.sort();
for(indx=0; indx<dtno; indx++)
{ write = document.createElement('span');
write.innerHTML = "<a onclick=\"window.open('" + dat[indx][1] +
"', 'Menu');\" style=\"color:#0000ff;" +
"text-decoration:underline;cursor:pointer;\">" +
dat[indx][0] + "</a> " + dat[indx][2] + "<br />";
form.appendChild(write);
}
return;
}
// -->
</script>
</head>
<body onload="initialize();" style="background-color:#a0a0a0; color:#000000;
font-family:sans-serif; font-size:11pt;">
<h2>
MENU
<noscript><br /><span style="color:#ff0000;">
Links here only work if<br />
your browser's JavaScript<br />
support is enabled.</span><br /></noscript></h2>
These are the menu items you currently have available:<br />
<br />
<form id="MENU" action="" onsubmit="return false;">
<!-- Yes, the <form> object starts out completely empty -->
</form>
Click any link, and enjoy it as much as you like.<br />
Then use your browser's BACK button to return to this Menu,<br />
so you can click a different link for a different thing.<br />
<br />
<br />
<small>This file (web page) Copyright (c) 2013-present by me</small>
</body>
</html>
다음은 훌륭한 기사입니다 . 공통 라이브러리를 구현하고 아래 코드를 사용하여 HTML 파일을 한 줄로 가져올 수 있습니다.
<head>
<link rel="import" href="warnings.html">
</head>
Google Polymer를 사용해 볼 수도 있습니다
ES6 백틱 사용 ``: 템플릿 리터럴 !
let nick = "Castor", name = "Moon", nuts = 1
more.innerHTML = `
<h1>Hello ${nick} ${name}!</h1>
You collected ${nuts} nuts so far!
<hr>
Double it and get ${nuts + nuts} nuts!!
`
<div id="more"></div>
이 방법으로 우리는 따옴표를 인코딩하지 않고 html을 포함하고 DOM의 변수를 포함하는 등을 할 수 있습니다.
강력한 템플릿 엔진입니다. 별도의 js 파일을 사용하고 이벤트를 사용하여 콘텐츠를 제자리에로드하거나 청크로 모든 것을 분리하고 필요에 따라 호출 할 수 있습니다.
let inject = document.createElement('script');
inject.src= '//....com/template/panel45.js';
more.appendChild(inject);
javascript
그때까지 취미 프로그래머로 그 배지를 크게 파괴했습니다 .
솔루션이 작동하게하려면 csi.min.js 파일을 포함시켜야합니다. 여기에서 찾을 수 있습니다. .
GitHub에 표시된 예제에 따라이 라이브러리를 사용하려면 페이지 헤더에 csi.js 파일을 포함시켜야합니다. 그런 다음 데이터 포함 속성을 값이 설정된 컨테이너에 포함하려는 파일에 추가해야합니다. 요소.
복사 코드 숨기기
<html>
<head>
<script src="csi.js"></script>
</head>
<body>
<div data-include="Test.html"></div>
</body>
</html>
도움이 되길 바랍니다.
PHP는 서버 수준의 스크립팅 언어입니다. 많은 작업을 수행 할 수 있지만 SSI와 매우 유사한 HTML 문서를 페이지에 포함시키는 것이 많이 사용됩니다. SSI와 마찬가지로 이것은 서버 수준의 기술입니다. 웹 사이트에 PHP 기능이 있는지 확실하지 않으면 호스팅 제공 업체에 문의하십시오.
다음은 모든 PHP 지원 웹 페이지에 HTML 스 니펫을 포함시키는 데 사용할 수있는 간단한 PHP 스크립트입니다.
사이트의 공통 요소에 대한 HTML을 파일로 분리하십시오. 예를 들어, 탐색 섹션은 navigation.html 또는 navigation.php로 저장 될 수 있습니다. 다음 PHP 코드를 사용하여 각 페이지에 해당 HTML을 포함 시키십시오.
<?php require($DOCUMENT_ROOT . "navigation.php"); ?>
파일을 포함시키려는 모든 페이지에서 동일한 코드를 사용하십시오. 강조 표시된 파일 이름을 포함 파일의 이름 및 경로로 변경하십시오.
django / bootle과 같은 프레임 워크를 사용하는 경우 종종 템플릿 엔진이 제공됩니다. bottle을 사용하고 기본 템플릿 엔진이 SimpleTemplate Engine이라고 가정 합니다. 아래는 순수한 html 파일입니다
$ cat footer.tpl
<hr> <footer> <p>© stackoverflow, inc 2015</p> </footer>
기본 파일에 footer.tpl을 포함시킬 수 있습니다.
$ cat dashboard.tpl
%include footer
그 외에도, 매개 변수를 dashborard.tpl에 전달할 수도 있습니다.
https://stackoverflow.com/a/31837264/4360308 의 답변을 기반 으로 다음과 같이 Nodejs (+ express + cheerio) 로이 기능을 구현했습니다.
HTML (index.html)
<div class="include" data-include="componentX" data-method="append"></div>
<div class="include" data-include="componentX" data-method="replace"></div>
JS
function includeComponents($) {
$('.include').each(function () {
var file = 'view/html/component/' + $(this).data('include') + '.html';
var dataComp = fs.readFileSync(file);
var htmlComp = dataComp.toString();
if ($(this).data('method') == "replace") {
$(this).replaceWith(htmlComp);
} else if ($(this).data('method') == "append") {
$(this).append(htmlComp);
}
})
}
function foo(){
fs.readFile('./view/html/index.html', function (err, data) {
if (err) throw err;
var html = data.toString();
var $ = cheerio.load(html);
includeComponents($);
...
}
}
추가-> div에 내용을 포함
replace-> div를 대체합니다
동일한 디자인에 따라 더 많은 동작을 쉽게 추가 할 수 있습니다.