私は自分の問題に対する明確な解決策を見つけるのに苦労しており、誰かがいくつかのヒントを提供できるかどうか疑問に思っていました。
JavaScriptに読み込んで使用するHTMLスニペットのコレクションを含む「templates.html」があります。 templates.htmlはロードされたDOMドキュメントではないことを念頭に置いて、テンプレート/スニペットにアクセスする良い方法は何ですか?
私はdocument.open
アクセスするDOMを作成しますが、これには特定のブラウザーで問題があると思います。
Htmlを非表示のdivに読み込むと、jquery loadを使用して、htmlをDIVに読み込む最も簡単な方法であるDOMにアクセスできます。 http://api.jquery.com/load/ =
$( "#result" ).load( "ajax/test.html" );
JQueryと.load()
( http://api.jquery.com/load/ )メソッドを使用して、ロードされたドキュメントをDOMに挿入します。
$(function() {
$('#content').load('/templates.html');
});
これは少し古いですが、「JavaScriptを使用したHTMLテンプレートの読み込み」はHTMLTemplateElement
の読み込みを指すようになったため、ネイティブテンプレートにjavascriptを読み込むためのより現代的なアプローチです。
まず第一に<template>
を使用することは、テンプレートが内部でありコンテンツを表示しないため、HTMLを非表示のDIVにロードするよりもすでに優れています。テンプレートを最初からレンダリングして、必要なときにいつでも使用できます。
<html>
<head>
<template>My template</template>
</head>
<body>
<script>
document.body.append(
document.importNode(
document.querySelector('template').content,
true
)
)
</script>
</body>
</html>
または、動的に作成します。
const template = document.createElement('template')
// modify the template's content
template.content.append(document.createElement('div'))
// add it to the document so it is parsed and ready to be used
document.head.append(template)
ネットワークから取得したテキストに基づいてテンプレートのコンテンツを構築するため、それを解析してtemplate.content
に追加する必要があります。
const text = fetchTemplateSomehowAsText('my-template.html')
const parsedDocument = new DOMParser().parseFromString(text, 'text/html')
template.content.append(parsedDocument.querySelector('#my-snippet'))
my-template.html
が既に<template>
タグでラップされている場合、DOMParserはすでにテンプレート要素を作成しているため、テンプレート要素を手動で作成する部分を回避できます。
document.head.append(
new DOMParser().parseFromString(text, 'text/html')
.querySelector('template')
)
)
This は、テンプレートをドキュメントに動的にロードするために使用しているスニペットであり、ここで説明した内容を使用しています。
これを行う別の方法は、 requireJS を使用することです。
require (['text!template_name'], function(yourTemplate) {
// do stuff in here with yourTemplate dinamically load
}
単純な要求の場合は、次を試すことができます。
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
//do something with xhr.responseText
}
};
xhr.open('GET', '/template.html');
xhr.send();
jquery ajaxを使用してテンプレート非同期をロードできます
$.get("/html/template01.html")
.done((data) => {
console.info(data); // output the content of the html file
});