<script type =“text / template”>… </ script>에 대한 설명


456

방금 전에 본 적이없는 것을 우연히 발견했습니다. Backbone.js의 예제 TODO 응용 프로그램 ( Backbone TODO Example ) 의 소스에서 템플릿은의 내부에있었습니다.이 템플릿 <script type = "text/template"></script>에는 PHP에서 보이지만 JavaScript 태그가있는 코드가 포함되어 있습니다.

누군가 나에게 이것을 설명 할 수 있습니까? 이것이 합법적인가요?


좋은 질문과 답변. 방금 새 YUI 앱 프레임 워크 코드에서이 트릭을 실행했습니다. new.yuilibrary.com/yui/docs/app/app-todo.html
mjhm

4
W3C 문서에서 무엇을 type="text/tcl"보았 습니까? 사용 방법? (다른 질문이 있습니까?)
L01man

3
@ L01man 네, 다른 질문을하셔야합니다.
Nate Glenn

답변:


413

이러한 스크립트 태그는 템플릿 기능 (PHP에서와 같이)을 구현하는 일반적인 방법이지만 클라이언트 쪽에서 사용됩니다.

유형을 "text / template"으로 설정하면 브라우저가 이해할 수있는 스크립트가 아니므로 브라우저는 단순히이를 무시합니다. 이를 통해 어떤 것도 넣을 수 있으며 나중에 추출하여 템플릿 라이브러리에서 HTML 스 니펫을 생성하는 데 사용할 수 있습니다.

백본은 특정 템플릿 라이브러리를 사용하도록 강요하지 않습니다 - 꽤 밖으로가있다 : 콧수염 , HAML , 에코 , 구글 폐쇄 템플릿 등 (예에서 사용 된 당신에있다 연결 underscore.js ). 이 스크립트 태그 내에 작성할 수 있도록 고유 한 구문을 사용합니다.


22
@ 매트, 정확히 그렇습니다. 동시에을 사용하여 전체 텍스트를 다시 쉽게 검색 할 수 .innerHTML있으므로 현재 템플릿 엔진간에 일반적인 방법입니다.
David Tang

1
그저 환상적인 소식이 아닙니다! 나는 이와 같은 해결책을 찾고 있습니다. 귀하의 답변과 후속 조치에 감사드립니다!
Matt

7
안녕하세요, 다른 매트입니다. <script type = "text / template">가 html 인증 테스트를 통과합니까?
Matt


5
미래에서 안녕하세요. <template>여기에 있지만 사이트는 여전히 reddit.com과 같은이 기술을 사용하고 있습니다. : F
Victor Zamanian

114

합법적이고 매우 편리합니다!

이 시도:

<script id="hello" type="text/template">
  Hello world
</script>
<script>
  alert($('#hello').html());
</script>

여러 Javascript 템플릿 라이브러리가이 기술을 사용합니다. Handlebars.js 가 좋은 예입니다.


5
jquery를 사용하여 원시 자바 스크립트 에서이 경고를 어떻게 수행합니까?
tremor

3
@tremor jquery없이 원시 자바 스크립트를 의미합니까? var el = document.getElementById ( 'hello'); var html = el.textContent; 경고 (html); (당신은 IE에서 처리 스크립트 태그 '텍스트에 더 찾을해야합니다)
SgtPooki

@ SgtPooki 나중에 나는 대답하지 않고 고맙습니다. 내가 정말로하고 싶은 것은 스크립트를 외부 파일로 가져 와서 얻는 것이지만 실제로는 불가능하다는 것을 알았습니다. 그래서 지금 AJAX와 socket.io로 뛰어 들었습니다.
tremor

@tremor, 나는 당신이하려는 일을 정확하게 이해하지 못할 수도 있지만 템플릿으로 실행하거나 구문 분석하기 위해 외부 파일을 동적으로 가져 오는 것이 가능합니다. requirejs를 확인하십시오.
SgtPooki

@tremor 외부 파일을 동적으로 가져 오려면 스크립트 태그보다 XHR을 사용하고 싶습니다. XHR은 일반 HTML 응답이나 그 문제에 대한 다른 작업에서도 작동합니다.
Jeroen Landheer

26

type이외의 스크립트 태그를 설정 text/javascript하면 브라우저는 스크립트 태그의 내부 코드를 실행하지 않습니다. 이것을 마이크로 템플릿이라고합니다. 이 개념은 단일 페이지 응용 프로그램 (일명 SPA)에서 널리 사용됩니다.

<script type="text/template">I am a Micro template. 
  I am going to make your web page faster.</script>

마이크로 템플릿의 경우 스크립트 태그의 유형은입니다 text/template. Jquery 작성자 John Resig에 의해 잘 설명되어 있습니다 http://ejohn.org/blog/javascript-micro-templating/


당신이 포함한 훌륭한 자료. 그 링크는 저에게 많은 것을 가르쳐주었습니다.
rocktheartsm4l 2016 년

13

Box9의 답변에 추가하려면 :

Backbone.js는 John Resig의 원래 마이크로 템플릿을 구현하는 underscore.js에 의존합니다.

Rails와 함께 Backbone.js를 사용하기로 결정했다면 Jammit gem을 확인하십시오. 템플릿의 자산 패키징을 관리하는 매우 깨끗한 방법을 제공합니다. http://documentcloud.github.com/jammit/#jst

기본적으로 Jammit은 JResig의 마이크로 템플릿을 사용하지만 템플릿 엔진을 교체 할 수도 있습니다.


또한 Jammit을 제공하는 DocumentCloud는 Backbone 및 Underscore를 개발 한 회사와 동일합니다.
Ceasar Bautista

12

렌더링하거나 정규화하지 않고 HTML에 텍스트를 추가하는 방법입니다.

다음과 같이 추가하는 것과 다르지 않습니다.

 <textarea style="display:none"><span>{{name}}</span></textarea>

32
텍스트 영역은 여전히 ​​해당 요소를 DOM에 삽입하고 요청 된 이미지와 같은 외부 자산을 가져옵니다. 스크립트 태그는 그렇지 않습니다.
LocalPCGuy

13
<img src="image.jpg">텍스트 영역 내부를 포함하여 @LocalPCGuy가 true 가 아닌 경우 브라우저가 페치되지 않으므로 image.jpg브라우저는 텍스트 영역 내부의 컨텐츠가 렌더링되지 않는다는 것을 알고 있습니다.
vikki

5
@vikki woops, 맞습니다. 텍스트 영역은 스크립트 태그 템플릿을 대체 할 수있는 몇 안되는 요소 중 하나 일 수 있습니다.
LocalPCGuy

4
@LocalPCGuy 예, 그 두 가지를 서로 바꿔 사용할 수 있다고 생각합니다. 템플릿에 선이 </script>있으면 스크립트 태그 내에서 사용할 수 없으므로 텍스트 영역을 사용할 수 있으며 그 반대도 가능합니다.
vikki

2
예 ... 템플릿 태그 이전과 스크립트 유형 = 텍스트 / 템플릿 이전에 모두 텍스트 영역으로 수행했습니다. 우리가 아약스가 없었을 때 iframe과 같은 것입니다.
dkellner

11

<script type = “text/template”> … </script>더 이상 사용되지 않습니다. <template>대신 태그를 사용하십시오 .


9
<template>IE 11
ovinophile

87
5 년 후 <template> 태그를 사용하십시오.
superluminary

13
<script type =“text / template”>은 구문 분석되지 않은 모든 항목을 보유 할 수 있습니다. 반면 <template> 태그는 DOM으로 구문 분석되므로 유효한 HTML이 필요합니다. 일반적으로 이는 첫 번째는 그대로 템플릿으로 유지되고 두 번째는 HTML과 호환되지 않는 부분을 제거하고 템플릿을 손상시킵니다. ... 물론 수염과 같은 템플릿 엔진을 사용하는 경우에만 문제가됩니다.
dagnelies

10
<template> 태그를 사용하지 말고 "더 이상 사용되지 않는"것을 기반으로 결정하지 마십시오. 밀라노 패션 위크가 아닙니다. 무언가가 효과적이고 기술적으로 적합하다면 다음과 같이 사용할 수 있습니다 :) 이제 실제 : <template> 태그는 IE 및 Opera Mini에서 여전히 지원되지 않으며 (CanIUse에 따라) <script> 태그는 숨겨진 div 또는 공백이나 주석을 잃을 수있는 다른 태그와는 달리 정확히 제공하십시오.
dkellner

3
답변이 게시 된 지 2 년 만에 IE11 자체는 사용되지 않는 기술이며 Microsoft는 대신 Edge를 지원하고 <template>있습니다. 대부분의 주요 데스크탑 브라우저는이 <template>태그 를 지원합니다 . 지금부터 사용하는 것이 좋습니다. developer.mozilla.org/en/docs/Web/HTML/Element/…
Yeo

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.