我使用Backbone.js和模板是在腳本標記內。我有一個使用jQuery選擇器迭代所有輸入字段的插件。它沒有獲得腳本標籤內的輸入。jQuery選擇標記內部腳本標記
任何想法的如何從腳本標記內定義的html獲取屬性?
謝謝!
我使用Backbone.js和模板是在腳本標記內。我有一個使用jQuery選擇器迭代所有輸入字段的插件。它沒有獲得腳本標籤內的輸入。jQuery選擇標記內部腳本標記
任何想法的如何從腳本標記內定義的html獲取屬性?
謝謝!
<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>
元素的字符串。
再次謝謝你! – dzm
顯示一些代碼! –
我們需要看代碼,但我假設你的jQuery在呈現模板之前運行(HTML在DOM中)。 –