1

私は次のjQueryを持っていますが、なぜそれが-10ではなく返されるのか混乱していますか?誰でも説明できますか:

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

なぜ配列を使用するのですか?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 に答える
0
var one = $('.test');

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

Javascriptは2つのオブジェクトを比較する方法を知らないため、それらの比較は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));

重要なのは、配列内のJQUERYオブジェクトではなく、配列内のDOMオブジェクトを検索する必要があるということです。

これがお役に立てば幸いです。

于 2012-04-04T18:46:35.753 に答える