2012-06-18 55 views
1

我使用Backbone.js和模板是在脚本标记内。我有一个使用jQuery选择器迭代所有输入字段的插件。它没有获得脚本标签内的输入。jQuery选择标记内部脚本标记

任何想法的如何从脚本标记内定义的html获取属性?

谢谢!

+1

显示一些代码! –

+0

我们需要看代码,但我假设你的jQuery在呈现模板之前运行(HTML在DOM中)。 –

回答

7

<script>就DOM而言,元素本质上是黑盒子,他们只是持有DOM不关心的数据(具体来说,它们持有non-replaceable character data,而不是标记)。因此,如果你做的是$('input'),你不会找到<script>元素中的<input>,因为<script>s内部没有任何<input>元素,只是包含字符序列'<', 'i', 'n', 'p', 'u', 't', ...的字符数据(即字符串)。

举例来说,如果你有这样的HTML:

<div></div> 
<script id="tmpl" type="text/x-underscore-template"> 
    <input name="{{name}}"> 
</script>​ 

那么这样的:

console.log('divs: ' + $('div').length); 
console.log('inputs: ' + $('input').length); 

会告诉你,有一个<div>和零<input> S和它说的都是实话。如果你需要看<script>里面,你就必须把字符数据转换成HTML手工的东西,如:

var $inputs_in_script = $($('#tmpl').html()).filter('input'); 

$inputs_in_script的长度将是一个。

演示:http://jsfiddle.net/ambiguous/64kjq/

如果你使用一个模板引擎处理您<script>当时的你必须调用该模板引擎给你的HTML插件。然后插件会找到<input>,因为它们将是真实的<input>元素,而不是看起来像<input>元素的字符串。

+0

再次谢谢你! – dzm