jQuery从骨干的脚本标签中选择标记

时间:2012-06-18 16:05:45

标签: javascript jquery backbone.js

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

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

谢谢!

1 个答案:

答案 0 :(得分:7)

就DOM而言,

<script>元素本质上是黑盒子,它们只保存DOM不关心的数据(具体来说,它们持有non-replaceable character data,而不是标记)。因此,如果您执行$('input'),则无法找到<input>元素内的<script>,因为<input>元素内部没有<script>元素{1}} s,只包含字符序列'<', '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>,它会说实话。如果您需要查看<script>内部,您必须手动将该字符数据转换为HTML:

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

$inputs_in_script的长度为一。

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

如果您使用模板引擎处理<script>,那么您必须在模板引擎为您提供的HTML上调用您的插件。然后插件会找到<input> s,因为它们将是真正的<input>元素,而不是看起来像<input>元素的字符串。