jQuery 根据定义获取选定的对象

jQuery get selected object upon definition

我正在使用这样的代码来为我的幻灯片元素设置动画。请注意,这更像是一个 jquery 问题,而不是一个 flexlider 问题。

现在,在 flexslider 中我可以定义一个 jQuery 对象作为参数传递,像这样指定滑块控件的容器:

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

很好,但是稍后我将定义第二个滑块时,让我们一步一步来,我为第二个滑块复制粘贴上面的代码,如下所示

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

正如预期的那样,很有魅力。然而,现在我们有丑陋的代码,所以让我们清理它,因为两个滑块的选项相同,我想把它更通用化为一个class,这是下一步:

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

不对,问题就出在这里。当然,$(this)指的是文档!那么,我可以在上面的代码(最后一个块)中做什么来告诉 jQuery 我想引用当前选择的 '.slider' 而不是文档?显然,如果我只将 $('.controls-container') 作为参数传递,我将在两个滑块中获得双重选项,所以我不希望这样。

你是对的,$(this) 不会指向你调用 flexslider() 的元素。要解决此问题,您需要将 flexslider() 调用置于元素范围内,方法是将其置于 each() 调用中,如下所示:

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