2010-03-09 44 views
111
var a=$('#start > div:last-child'); 
var b=$('#start > div.live')[0]; 
alert(a==b) 
alert(a==$(b)) 

比較它總是假的。你如何比較jQuery中的兩個元素?如何將兩個元素的jQuery

感謝

回答

117

您可以比較DOM元素。請記住,jQuery選擇器返回的數組在參考平等意義上永遠不會相等。

假設:

<div id="a" class="a"></div> 

這樣的:

$('div.a')[0] == $('div#a')[0] 

返回true。測試

+0

有後你測試過了嗎?我敢肯定的,因爲在'.selector'屬性的差異也不會返回true。 – 2010-03-09 13:35:58

+3

是的,我已經測試了IE6,FF 3.6和Chrome 4的代碼,它返回'所有這些瀏覽器TRUE'。 – 2010-03-09 17:15:11

+5

參見下面通過5 R-U-BN的註釋。下面的技巧:a.is(b) – JCallico 2012-03-08 19:43:27

-1

收集結果,你得到一個jQuery回不支持組爲基礎的比較。您可以使用各個成員比較一個接一個,雖然,有沒有實用程序這一點,我知道在jQuery的。

2

隨機AirCoded例如jQuery的「設置平等」:

$.fn.isEqual = function($otherSet) { 
    if (this === $otherSet) return true; 
    if (this.length != $otherSet.length) return false; 
    var ret = true; 
    this.each(function(idx) { 
    if (this !== $otherSet[idx]) { 
     ret = false; return false; 
    } 
    }); 
    return ret; 
}; 

var a=$('#start > div:last-child'); 
var b=$('#start > div.live')[0]; 

console.log($(b).isEqual(a)); 
9

每次調用的jQuery()函數時,創建一個新的對象,並返回。所以即使對相同選擇器進行平等檢查也會失敗。

<div id="a">test</div> 

$('#a') == $('#a') // false 

所得jQuery對象包含匹配的元件,其基本上類似HTMLDivElement始終指代相同的對象源DOM對象的數組,所以應該使用陣列索引作爲達林建議檢查那些的相等性。

$('#a')[0] == $('#a')[0] // true 
293

爲了記錄在案,jQuery有此一is()功能:

a.is(b) 

注意a已經是一個jQuery的實例。

+2

這是很好的作品! – 2012-08-28 09:38:58

+0

這個方法也有工作在「==」解決方案的優點:'$(event.target).is($(「#a」))' – Tyson 2012-11-28 03:49:52

+1

@DanielS我不認爲你的2添加了「$(..)「在這裏是必需的,因爲在問題a和b已經是jquery實例,我也只是提到它可能會認爲你必須加倍加載的其他人 – 2012-12-04 16:28:59

3
a.is(b) 

,並檢查它們是否不等於使用

!a.is(b) 

$b = $('#a') 
.... 
$('#a')[0] == $b[0] // not always true 

也許類添加到元素或刪除它的第一個任務

+0

a.not(b)不是a.is(b)的逆,而是它從a中移除元素b。反而使用!a.is(b) – 2016-07-18 10:32:38

+0

是的,你是對的! – Jondi 2017-02-07 12:43:54

相關問題