2012-08-16 44 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即可。

相关问题