2012-03-05 54 views
5

我有一個使用jQuery和一組嵌入式模板的單頁Web應用程序。模板可以包含標籤象下面這樣:Jquery;正確選擇腳本標記的內容

<script type="html/template" id="sample"> 

<script type="text/javascript" charset="utf-8">alert('x');</script> 


</script> 

和一個jquery代碼以檢索所述模板是

$("#sample").html(); 

以上的jquery命令的輸出是

<script type="text/javascript" charset="utf-8">alert('x'); 

代替

<script type="text/javascript" charset="utf-8">alert('x');</script> 

我該如何解決這個問題輸出?

+0

如果您查看瀏覽器的代碼,它會刪除嵌入的結束腳本標籤。 – 2012-03-05 12:15:36

+0

您可以在最後 附加一個「」請注意,這是因爲瀏覽器不支持這種類型的腳本 – 2012-03-05 12:24:00

回答

1

一切一<script>內預計將腳本,而不是HTML。

瀏覽器看到:

<script type="html/template" id="sample">

,並開始解釋隨後出現的腳本一切,當它到達內<script其視爲只是被文字。

的例外是</script>其瀏覽器,以便從腳本切換上下文到HTML找,所以當它看到在第一</script>

<script type="text/javascript" charset="utf-8">alert('x');</script>

它假定開幕腳本塊完成&切換回期待HTML,外腳本節點的內容正確地設定爲:

<script type="text/javascript" charset="utf-8">alert('x');

您可以實現您試圖在服務器上執行的操作並在其中進行解析,或者使用不同的方法進行模板化。

0

這是因爲瀏覽器不支持HTML /模板MIME類型,不知道如何使用它。您只能通過轉義script-tag內的字符串來修復它。

2

我不確定這會幫助你。

var a = $("#sample").html() +'</'+'script>'; 

alert(a);​ 

小提琴鏈接:http://jsfiddle.net/Sg5W8/

0

怎麼樣

var c = $("#sample script").html(); 
var type = $("#sample script").attr("type"); 
var chset = $("#sample script").attr("utf-8"); 

var ouptut = '<script type="'+ type +'" charset="'+ charset +'">' + c + '</script>' 
1

嵌套script標記不允許在HTML,並且如果您通過validator運行嵌套腳本,則會出現Stray end tag script錯誤。

您需要轉義腳本標記,或使用別的東西作爲模板語法的保留元素。

0

如果可能的話,我會建議將腳本移出。我嘗試了2個選項。第一個是使用html編碼,第二個是自定義腳本元素。

1. HTML編碼

http://jsfiddle.net/Ae48z/

<script type="html/template" id="sample"> 

    &lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;alert(&#39;x&#39;); &lt;/script&gt; 

JS

var out = $("#sample").html(this); 
    console.log(out); 

2.script更換

http://jsfiddle.net/2G7gj/

<script type="html/template" id="sample"> 
    <xscript type="text/javascript" charset="utf-8">alert('x');</xscript> 

</script> 

var out = $('#sample').html().replace(/xscript/g,'script'); 
console.log(out)