2017-11-17 6 views
0

私はちょうど1つの方法が機能し、もう1つの方法が機能しない理由を区別するのに問題があります。私は.eq()を使用して実行可能な解決策を持っていますが、それでもオブジェクトを返す場合、[]表記を使用して.cssメソッドを呼び出すことができない理由を正しく理解したかったですか?jQuery .eq(index)vs [index]両方がオブジェクトを返す場合は?

はここに私のテストコードで、自分自身をそれを把握しようとした:

$('.slider').each(function() { 
    var $slides = $('.slide'); 

    console.log(jQuery.type($slides.eq(1))); 
    console.log(jQuery.type($slides[2])); 

    $slides.eq(1).css({color: 'red'}); 
    $slides[2].css({color: 'red'}); 
}); 

コンソールログは、両方のセレクタは、オブジェクトを返していることを教えてください。では、なぜオブジェクトではないように[]表記にtypeErrorを取得するのですか?

任意の説明を理解してください。

おかげで、

答えて

1

は、配列構文は、オブジェクトを返しますが、あなたがそれにjQueryの機能にアクセスしたい場合は、.eq()はjQueryオブジェクトを返すことに$(object)を呼び出す必要があります。たとえば:

console.log('By eq:', $('button').eq(0).text()) 
 
console.log('By Array as a JQuery Object', $($('button')[0]).text()) 
 
try { 
 
    console.log('By Array:', $('button')[0].text()) 
 
} catch(e) { 
 
    console.log('You get an exception because the element doens\'t have a property named text'); 
 
    console.log(e); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button>A button</button>

+1

も「オブジェクト」は、最も一般的な内部javascriptのクラスであることに注意してください、それは 'でも、生のHTML要素のjQuery.type'は' '「オブジェクト」を返します。実際、 '$ slides [2]'は生のHTML要素なので、それはまさに何が起こっているのかです。 – Hamms

+0

完璧な意味を持ちます。私はどちらの点も考えていませんでした。 $ slideはjQueryオブジェクトだったので、[]を使用してもjQueryオブジェクトのままになりましたが、今は理解しています。 あなたの時間と労力を感謝します。 –

関連する問題