使用jQuery在Array中搜索

时间:2012-04-04 18:27:30

标签: jquery arrays

我有以下jQuery,我很困惑为什么它返回-1而不是0?有人能够解释:

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')?也就是说,在数组中找到它?

4 个答案:

答案 0 :(得分: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 = [[$]];

然后比较一个数组是否在另一个数组中变成一个更复杂的问题。

答案 1 :(得分:0)

var one = $('.test');

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

Javascript不知道如何比较两个对象,因此它们的比较返回false。我猜它在查看内存地址以确定它们的相等性。

由于js无法确定它们的相等性,我猜测jquery库不处理inArray()方法中的对象。

答案 2 :(得分: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对象。

希望这会对你有所帮助。

答案 3 :(得分: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