2013-07-03 177 views
0

的「原始」的內容我有這個div:jQuery的:獲取元素

<div id="test"> 
    {{? a && b || c < 0}} 
     <div>Pece &alt; Love!</div> 
    {{?}} 
</div> 

我NEET做得到,就像它的上面報告及其內容(CHE花括號語法是一個模板引擎)。

不幸的是,html的(),也沒有的.text()工作:

// $('#test').text() 
{{? a && b || c < 0}} 
    Pece &alt; Love! 
{{?}} 

的.text()擺脫的標籤

// $('#test').html() 
{{? a &amp;&amp; b || c &lt; 0 }} 
    <div>Pece &amp;alt; Love!</div> 
{{?}} 

的.html()編碼符號(和< >)。

任何幫助?謝謝

+1

您必須在替換模板之前或之後執行此操作? – Cheluis

+0

'.text()'的輸出有什麼問題? – Blender

+3

就瀏覽器而言,HTML不再存在。一旦它被解析(並且它將被解析爲HTML,你不能停止它),它只能以HTML的形式存在。 – lonesomeday

回答

8

將模板存儲爲HTML並不是一個好主意。存儲它們的<script>標籤使用自定義MIME類型中:

<script type="text/your-template" id="template"> 
    {{? a<b && b>c }} 
     <div>Peace &amp; Love!</div> 
    {{?}} 
</script> 

存儲沒有HTML作爲HTML會產生不良的結果模板,因爲你已經注意到:

  • 你原來的標記不見了。什麼時候你看.innerHTML屬性,你看到的是什麼瀏覽器解釋你的模板,如果它是有效的HTML,它可以改變它:http://jsfiddle.net/ZFd6a/3/
  • a<b && b>c會變成ac,作爲中間部分將被解釋爲一個元素。
  • 雜散小於和大於號的符號將轉化爲字符實體。
  • 您必須使用HTML字符實體。

你完全受到瀏覽器HTML解析器的支配。當您將模板移動到<script>標籤中時,其模板類型不是爲JavaScript保留的,您的模板將被視爲字符串,這正是您想要的。

+1

http://jsfiddle.net/FX88y/ –

+0

謝謝,我知道這一點,並且當我使用doTjs時,我通常會這樣做。不過,在這種情況下,我必須使用常規標籤。 – pistacchio

+2

@pistacchio:爲什麼? – Blender