1

我有以下 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

4 回答 4

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 = [[$]];

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

于 2012-04-04T18:32:50.420 回答
0
var one = $('.test');

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

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

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

于 2012-04-04T18:32:31.907 回答
0

检查这个小提琴,我已经重写了

例如

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

  var foundAry=$.makeArray(found);

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

关键是您需要在数组中搜索 DOM 对象,而不是在数组中搜索 JQUERY 对象。

希望这会帮助你。

于 2012-04-04T18:46:35.753 回答
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
于 2012-04-04T19:04:00.627 回答