2012-04-04 36 views
1

我有以下jQuery,我很困惑,爲什麼它返回-1而不是0?有沒有人能夠解釋:在使用jQuery的數組中搜索

var one = $('.test'); 
var two = $('.test2'); 

var myArray = []; 
myArray.push(one); 

if($.inArray($('.test'), myArray) < 0) { 
    myArray.push(two);   
} 

console.log($.inArray($('.test'), myArray)); //return -1 

我設置http://jsfiddle.net/ecrMw/1/,我試圖返回0$('.test')?也就是說,在數組中找到它?

+0

難道你不想測試'console.log($。inArray(one,myArray));'哪個返回0? – j08691 2012-04-04 18:32:53

回答

2

因爲jQuery對象實際上是一個集合不是DOM元素。什麼你要找的是傳真:

var one = $('.test')[0]; 
var two = $('.test2')[0]; 

// on with your code 

然後,你對元素再次測試:

if ($.inArray($('.test')[0], myArray)){ 
} 

否則(直言譜寫)要添加陣列到陣列:

var one = $('.test'); // actually a [$] array 
var two = $('.test2'); // actually another [$] array 

var myArray = []; // empty array 
myArray.push(one); // one = [[$]]; 

然後比較一下數組是否在另一個數組中是一個更復雜的問題。

+0

謝謝布拉德。我試圖向數組中添加一堆元素,然後搜索添加到數組的所有元素?我確實嘗試過'[0]',但是不會搜索數組中的所有內容? – Andy 2012-04-04 18:34:22

+0

@Andy:那你爲什麼不用'.find()','.has()'或'.is()'? – 2012-04-04 18:36:03

+0

不清楚我可以如何使用這些來搜索添加到'myArray'的值? – Andy 2012-04-04 18:37:22

0
var one = $('.test'); 

console.log($('.test') == one); //Outputs false 

JavaScript不知道如何比較兩個對象,因此它們的比較返回false。我猜測它在查看內存地址來確定它們的平等性。

由於js不能確定它們的相等性,我猜jQuery庫不處理inArray()方法中的對象。

0

檢查this小提琴,我已經重新寫

e.g

var found = $('.test,.test2').map(function(){return $(this).get(0)}) 

    var foundAry=$.makeArray(found); 

    console.log($.inArray($('.test').get(0), foundAry)); 

的一點是,你需要在數組中排列搜索DOM對象不是jQuery對象。

希望這會幫助你。

0

爲什麼要使用數組?你可以使用jQuery集合。

var $one = $('.test'), 
    $two = $('.test2'), 
    $myCollection = $(); 

$.merge($myCollection, $one); 

if($myCollection.index($one) < 0) { 
    $.merge($myCollection, $two); 
} 

console.log($myCollection.index($one) ); //returns 0