2012-08-16 43 views
6

我在下面的HTML頁面有一個腳本里面:找到一個jQuery對象的javascript <script>標籤

<script id="scriptid" type="text/html"> 
    <div id="insidedivid"> 
     ... html code ... 
    </div> 
</script> 

我能夠使用$("#scriptid")得到HTMLScriptElement,但我不能讓底層的div對象的編號爲"insidedivid"。什麼是做到這一點的方式?

+4

您的標記無效。 – undefined 2012-08-16 22:55:20

+0

你想用模板做些什麼嗎? http://ejohn.org/blog/javascript-micro-templating/ – dana 2012-08-16 22:56:30

+0

@undefined:當使用像'knockoutJs'或'Handlebars'這樣的庫時,例如你必須定義模板。 – Nope 2012-08-16 23:17:05

回答

8

這是不可能的;瀏覽器不會將<script>標記中的HTML內容視爲DOM的一部分。當您使用$('#idhere').html()檢索<script>標記的內容時,您會收到字符串結果。

要回答特洛伊的問題,他是最有可能包括在他的文件的<head>模板,以便他能夠最終動態地呈現在瀏覽器端的內容。但是,如果是這種情況,則OP應使用與text/html不同的MIME類型。您應該使用未知的MIME類型,例如text/templates - 使用text/html會混淆內容的用途。

猜測你想達到入<script>標籤和搶div是因爲你的單<script>標籤中內置較小的子模板的原因。那些較小的模板應該放置在它們自己的<script></script>標記中,而不是包含在一個大的<script></script>標記對中。

因此,而不是:

<script type="text/template" id="big_template"> 
    <div id="sub_template_1"> 
     <span>hello world 1!</span> 
    </div> 
    <div id="sub_template_2"> 
     <span>hello world 2!</span> 
    </div> 
</script> 

這樣做:

<script type="text/template" id="template_1"> 
    <span>hello world 1!</span> 
</script> 

<script type="text/template" id="template_2"> 
    <span>hello world 2!</span> 
</script> 
0

你的HTML是無效的。 HTML Validator

如果你想有HTML,你可以得到的只是這樣,使用這樣的:

<!DOCTYPE HTML> 
<html> 
<head> 
    <meta charset="UTF-8" /> 
    <title></title> 
    <script type="text/javascript" src="//code.jquery.com/jquery-latest.js"></script> 
    <script type="text/javascript"> 
$(document).ready(function() { 
    var msg1 = $('message1'); 
    // Execute code here 
}); 
    </script> 
</head> 
<body> 
    <div id="content">Content</div> 
    <div id="hidden" style="display: none"> 
     <div id="message1">Message 1</div> 
     <div id="message2">Message 2</div> 
    </div> 
</body> 
</html> 

如果您正在製作一個模板系統,你可能需要使用AJAX來代替。

2

我認爲如果一個div對於您爲 腳本定義的TYPE有意義,那麼在腳本標記內部有一個div是完全有效的(或者在 最不實用)。例如,John Resig在他的微模板解決方案中使用類型爲「text/ html」的腳本標記: http://ejohn.org/blog/javascript-micro-templating/ 儘管(在回覆原始作者的情況下)您將 ID添加到SCRIPT標記,並提到(我不明白爲什麼它 不會與該Facebook類型而不是HTML - 但你可能想 在幾個不同的瀏覽器中測試它)。因爲你給了 例如,您可以通過執行獲得的DIV的引用:

<script id="scriptid" type="text/html"> 
    <div id="insidedivid"> 
     ... html code ... 
    </div> 
</script> 
    $(function(){ 
     alert($($('#scriptid').html()).text()); //alerts " ... html code ..." 
    }); 

的「絕招」是使用jQuery獲取腳本代碼的HTML並上交成DOM 元素 - 但要記住,因爲你將所有的HTML文件都傳遞給jQUery函數,那麼你立即選擇頂層元素的所有 。在這種情況下,只有一個DIV - 因此您只需選擇該DIV即可。

相關問題