2017-01-26 5 views
1

私はこのようなコードを使用してスライド要素をアニメートしています。これはflexliderの質問ではなく、jqueryの質問のほうが多いことに注意してください。jQuery定義時に選択したオブジェクトを取得

さて、flexsliderに私はスライダーのコントロールのコンテナを指定するには、このように、引数として渡すためにjQueryオブジェクトを定義することができます。

$('.header-slider').flexslider({ 
    animation: "slide", 
    directionNav: false, 
    slideshowSpeed: 5000, 
    controlsContainer: $('.header-slider .controls-container') 
}); 

すべて良いが、後で私が定義するときに第2スライダ、のは、それはステップバイステップでみましょう、私はコピー&ペーストを私の第2のスライダのために上記のコードを魔法のように、この

$('.quote-slider').flexslider({ 
    animation: "slide", 
    directionNav: false, 
    slideshowSpeed: 5000, 
    controlsContainer: $('.quote-slider .controls-container') 
}); 

作品のように、予想通り。しかし、今、私たちは醜いコードを持っているので、のは、それをきれいにしましょう、オプションは両方のスライダーのために同じなので、私は1つのクラスに、これは、より一般的なようにしたいと、ここで次のステップです:

$('.slider').flexslider({ 
    animation: "slide", 
    directionNav: false, 
    slideshowSpeed: 5000, 
    controlsContainer: $(this).find('.controls-container') 
}); 

は、いや、ここです当然のことながら、$(this)はこの文書を参照しています!では、上記のコード(最後のブロック)で、jQueryに、現在選択されている'.slider'を参照したいのですが、ドキュメントではないことを教えてください。明らかに、$( 'controls-container')を引数として渡すだけで、両方のスライダーで2つのオプションが得られるので、私はそれを望んでいません。

答えて

1

あなたが正しくて、$(this)は、flexslider()を呼び出している要素を指していません。このように、each()コールでそれを置くことによって、あなたは要素の範囲内でflexslider()呼び出しを配置する必要があり、これを修正するには:

$('.slider').each(function() { 
    $(this).flexslider({ 
     animation: "slide", 
     directionNav: false, 
     slideshowSpeed: 5000, 
     controlsContainer: $(this).find('.controls-container') 
    }); 
}); 
+0

ああ右、興味深いソリューションを、ありがとうございました!しかし、これは唯一の解決策ですか? jQueryには、積み重ねられたルール内の現在の要素を参照する方法はありませんか? –

+1

これはjQueryの問題ではなく、機能レベルでスコープされているJSの問題です。 –

+0

うーん、そうだ。申し訳ありませんが、迅速かつ明確な助けをいただきありがとうございます! –

関連する問題