這篇文章主要介紹了HTML5中的template標籤,是HTML5入門中的重要知識,需要的朋友可以參考下
##一、HTML5 template元素初面
元素,基本上可以確定是2013年才出現的。幹嘛用的呢,顧名思意,就是用來聲明是「模板元素」。 目前,我們在HTML中嵌入模板HTML,往往是類似這樣的寫法:<script type="text/template"> // ... </script>
以前,我們可能也使用過
HTML標籤程式碼,實作一些特定的前端功能,但,同樣的,跟上面的流行用法一樣,都是不規範的。從未來趨勢來講,顯然標籤才是王道。但是,相容性是個不可忽略的問題,因此,就算扯得很多很少,實際價值有有限,因此,這裡僅僅簡單介紹下。 二、HTML5 template元素複面
看下下面四種巢狀圖片HTML,同時圖片內容不顯示,不會有請求的寫法:
<script type="text/template"> <img src="mm1.jpg"> </script> <textarea style="display: none;"> <img src="mm1.jpg"> </textarea> <xmp style="display: none;"> <img src="mm1.jpg"> </xmp> <template> <img src="mm1.jpg"> </template>
<script>本身的特定,讓內部的HTML標籤是按照</p>字串<p>處理的,因此,天生內容不顯示。但是,在DreamWeaver中,這種寫法有個很大的問題,就是在script中書寫模板HTML時候,標籤自動閉合的永遠是</script>這個很討厭的。
標籤取代而廢止,實際上,目前,所有的瀏覽器都是支援的。但是,其跟<pre class="brush:php;toolbar:false">標籤不能劃等號。 <pre class="brush:php;toolbar:false">裡面有<img>標籤,顯示的則是一張圖片,而<xmp>呈現的就是一段HTML程式碼。不過,與<textarea>一樣,內容不顯示的話,還需要額外的設定display: none;<a href="http://www.php.cn/wiki/169.html" target="_blank"> 上面這個<template>標籤上沒有設定display: none;,注意到了沒有。為何?這只是發揮了<template>標籤元素的原本特性,天生display:none,同時模板元素內部內容是死活不會呈現的。因此,無需設定隱藏。這就是HTML5 <template>標籤元素特徵之一:標籤內容隱藏性.</a><br/></p>2.標籤位置任意性<p><strong>除了上面<template>子元素天然隱藏外,<template>標籤還有一個特性,就是位置任意性,這非常類似<script>或<style>標籤,可以在<<br/>head</strong>>中,也可以在< body>或<frameset>中。 <a href="http://www.php.cn/html/html-HEAD-2.html" target="_blank"></a></p>3. childNodes無效性<p><strong>雖然,肉眼看起來是<template>標籤裡面還有很多子標籤,這種慣性思考在這裡是不可用的。假設<br/>變數</strong>template是我們得到的一個<template>標籤DOM(裡面一大堆HTML程式碼),你會發現:template.childNodes是個空大屁。我們可以使用template.innerHTML取得完整的HTML片段。如果你非得獲取「偽子元素」。也是有辦法的,OK,睜大眼睛,要使用content屬性。 <a href="http://www.php.cn/wiki/70.html" target="_blank"></a>template.content會回傳一個文件片段,你可以理解為另外一個document,然後,使用document下的一些查詢API就可以獲得<template>標籤裡面的「偽子元素」了。例如,取得第一張圖片元素則是:</p><p></p>CSS Code<p class="codeHead"><span class="lantxt">複製內容到剪貼簿</span><span style="CURSOR: pointer" class="copyCodeText"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:html;toolbar:false">var image_first = template.content.querySelector("img");
如果瀏覽器有眼不識泰山,認為就是個普通的自訂元素,則顯示的就會使下面這個樣子,內部的標籤按照一般的標籤渲染了。 如果浏览器与时俱进,则显示会是下面这样,自身CSS渲染,内部标签直接异空间不渲染,例如Chrome: 也就是说,虽然从CSS的角度看,就是个跟CSS打得火热的普通元素,但是,从HTML角度看,其犹如带土的写轮眼,可以让内部标签转移到异空间,血迹界限般稀有。 默认情况下,是隐藏的,实际是默认其display属性为none. 使用下面的代码一测便知: 因此,demo中才设置了如下的CSS声明: CSS Code复制内容到剪贴板 如果你是在HTML字符串上处理,类似于现在流行的MVC框架或模板技术,则template.innerHTML足矣。然,比
window.getComputedStyle(template).display; // 结果是"none"
template { display: block; ... }
模板的克隆