2010-11-30 79 views
33

標題中的等式如何是錯誤的?如何檢查兩個jQuery選擇器是否指向相同的DOM對象?

回答

57

你比較兩個不同jQuery的的對象,因爲你(對等式的每一側一次)調用$()兩次,as MooGoo explains jQuery的創建每次調用時間爲新的包裝對象。這就是爲什麼比較結果返回false。

通過使用get()或數組解引用,可以從每個jQuery對象中提取DOM對象,然後比較這些元素。

$('body').get(0) == $('body').get(0) 
$('body')[0] == $('body')[0] 

如果你想測試對jQuery選擇,使用is():因爲兩個相同的選擇相同body DOM元素符合以下兩個返回true。請注意,除非您的選擇器是相同的,否則您使用的選擇器可能不一定匹配相同的DOM元素(使用上面的元素更好)。這也返回true:

$('body').is('body') 
11

使用$。是()

http://api.jquery.com/is/

檢查當前匹配組針對一個選擇器,元件,或jQuery對象元素和返回true如果這些元素中的至少一個相匹配的給出的參數 ...

與其他過濾方法不同,.is()不會創建新的jQuery對象。相反,它允許您在不修改的情況下測試jQuery對象的內容。這通常是非常有用的內回調,如事件處理程序...

+0

查看其他答案爲什麼你需要$ .is()的實際解釋。 – pettazz 2010-11-30 20:03:43

35

因爲jQuery會爲每個$調用一個新的包裝對象,並在Javascript中的所有對象是不同的,即使他們有相同的屬性/方法。

另一方面,document.body == document.body將評估爲true

+3

你是第一個解釋包裝器對象創建。 +1 – 2010-12-01 00:35:30

+1

是的,出於同樣的原因給了我的投票。 – BoltClock 2010-12-01 05:53:14