2012-06-18 52 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