2015-12-05 302 views
1

存在元素可以說我有這個網站:檢查是否在一個jQuery集合

<div class="test"></div> 
<div class="test"></div> 
<div class="test" id="target"></div> 

某處在我的代碼我呼籲:

var $divs = $('.test'); 

後來,我致電:

var $target =$('#target'); 

現在,我想檢查是否$target$divs

我期待下面對第三迭代登錄true但我得到false 3次:

var $divs = $('.test'); 
var $target =$('#target'); 
console.log($target); 
$divs.each(function(){ 
     console.log($(this)); 
     console.log($(this) == $target); // expected true on 3rd iteration 
}); 

查看控制檯。這很明顯,爲什麼這返回false。

什麼是正確的方法來檢查$divs是否包含$target

Here is a jsFiddle

+2

使用'$(本)。是($目標)' –

+0

@PranavCBalan謝謝!我知道我曾經這樣做過,但不記得我的生活如何 – DelightedD0D

+0

@Vohuman據我所知,因爲'[div#target.test,上下文:文檔,選擇器:「#target」]'!='[ div#target.test,context:div#target.test]'。即使它們指向相同的dom元素,但對象本身也是不同的。但是如果你有時間,我全部都是爲了學習更具體的原因 – DelightedD0D

回答

1

爲對象不等於在JavaScript中另一個對象你的條件返回false。作爲一個例子:

$(window) !== $(window) 

這是因爲每次jQuery的構造被調用時創建一個新對象

在你的情況,如果你從集合包裝的對象的條件將返回true目標元素:

$target.get(0) === this; 
+0

謝謝你抽出時間解釋一下。我沒有意識到這種情況,但從現在開始你就指出了這一點。我甚至沒有考慮深入研究DOM元素,但現在也是非常有意義的。 – DelightedD0D

0

嘗試通過ID進行檢查,

$divs.each(function(){ 
     console.log($(this)); 
     console.log($(this).attr("id") == $target.attr("id")); 
}); 
0

變化console.log($(this) == $target)這個console.log($(this).is($target))

對於jQuery的comapring兩個對象,使用(a.is(b)).is()功能

var $divs = $('.test'); 
    var $target =$('#target'); 
    console.log($target); 
    $divs.each(function(){ 
      console.log($(this)); 
      console.log($(this).is($target)); 
    }); 

jsfiddle

相關問題