我正在使用Backbone.js,模板在脚本标签内。我有一个插件,它使用jQuery选择器迭代所有输入字段。它没有获取脚本标记内的输入。
任何想法是如何从脚本标签内定义的html获取属性?
谢谢!
答案 0 :(得分:7)
<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>
元素的字符串。