2012-03-02 71 views
1

我正在嘗試處理所有具有特定data-屬性集的select元素。每當.data用於返回的元素時,jquery .each產生'undefined'

我有循環工作來拾取元素,但每當我嘗試找到其他data-屬性的值,我得到undefined錯誤消息。

這裏是循環:

$('select[data-hm-observed="1"]').each(function(idx, sel) { 
     alert(sel.getAttribute('data-hm-url')); 
     alert(sel.data('hmUrl')); 
}); 

在循環第一個警報工作,但第二個生產:

TypeError: 'undefined' is not a function (evaluating 'sel.data('hmUrl')')

如果我使用Safari瀏覽器的控制檯,我可以得到的選擇對象,把它在一個變量中,並詢問其屬性沒有問題。

看起來.each()sel變量內容有影響 - 但我不明白是什麼。

使用jQuery 1.7.1

UPDATE:

剛發現,如果我改變循環,使其再次明確獲取的元素,它的所有作品:

$('select[data-hm-observed="1"]').each(function(idx, sel) { 
      xx = $(sel); 
     alert(sel.getAttribute('data-hm-url')); 
     alert(xx.data('hmUrl')); 
}); 

是這是正確的解決方案? 我可以推斷,由.each傳遞給循環的元素沒有被jquery「處理」,並且我必須通過$(...)自己抽取它,以便jquery完成它的任務 - 這感覺不對 - 但它的工作。

回答

4

sel這裏是一個DOM對象,沒有配備jQuery對象的能力。首先,你應該把這個DOM對象爲jQuery對象是這樣的:

另外,您還可以使用$(this).data('hmUrl'),因爲this將把sel(當前的DOM元素的迭代)。

+0

優秀謝謝你。是否有一個原因,爲什麼.each返回它作爲一個DOM而不是一個jQuery對象? – Houdi 2012-03-02 11:00:37

+0

@Houdi在引擎蓋下,jQuery「集合」是DOM元素的數組。迭代時,您會獲得這些DOM元素。基本上,當你做'$(sel)'時,你創建一個新的jQuery集合,只保存這一個對象。在幾種情況下,你不需要jQuery方法,只需簡單的DOM東西('.each()'中的'console.log(this.id)'就可以正常工作)。 – kapa 2012-03-02 11:04:12