我有以下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')
?也就是说,在数组中找到它?
答案 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