Загрузить HTML-шаблон с JavaScript - PullRequest
39 голосов
/ 23 июня 2011

Я изо всех сил пытаюсь найти чистое решение своей проблемы, и мне было интересно, если кто-нибудь может предложить несколько советов.

У меня есть "templates.html", который содержит коллекцию фрагментов HTML, которые я хочу загрузить вJavaScript и использовать.Какой хороший способ получить доступ к шаблонам / фрагментам, учитывая, что templates.html не является загруженным документом DOM?

Я думал об использовании document.open для создания DOM для доступа, но я думаю, что это имеетпроблемы в определенных браузерах.

Ответы [ 6 ]

43 голосов
/ 23 июня 2011

Используйте jQuery и метод .load() (http://api.jquery.com/load/), чтобы вставить загруженный документ в DOM.

$(function() {
    $('#content').load('/templates.html');
});
23 голосов
/ 23 июня 2011

Вы можете загрузить html в скрытый div, и тогда у вас будет доступ к DOM. Самый простой способ загрузить html в DIV - использовать jquery load: http://api.jquery.com/load/

$( "#result" ).load( "ajax/test.html" );
17 голосов
/ 21 мая 2017

Это немного устарело, но так как «Загрузка шаблона HTML с помощью JavaScript» в наши дни должна относиться к загрузке HTMLTemplateElement, здесь представлен более современный подход к загрузке шаблонов natives с помощью 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')
  )
)

Этот - фрагмент, который я использовал для динамической загрузки шаблонов в документкоторый использует то, что я только что объяснил.

10 голосов
/ 24 июня 2012

другой способ сделать это - использовать requireJS .

require (['text!template_name'], function(yourTemplate) {
  // do stuff in here with yourTemplate dinamically load
}
6 голосов
/ 20 декабря 2013

Для простого требования вы можете попробовать:

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = function () {
    if (xhr.readyState === 4) {     
        //do something with xhr.responseText
    }   
};      
xhr.open('GET', '/template.html');
xhr.send();  
4 голосов
/ 09 июня 2016

вы можете загрузить шаблон асинхронно, используя jquery ajax

$.get("/html/template01.html")
.done((data) => {
    console.info(data); // output the content of the html file
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...