什么替代了已弃用的属性this.selector。

4
在创建我的第一个jQuery插件时,我想在插件代码中使用仅限于最外层选择器的选择器。 this.selector 很完美。但是,它被拿走了 :/ 因此,我不想编写过时的属性,而是要使用最佳实践。
我希望确保只影响选择器内的项目。现在,我的插件有很多泄漏。我的变量panelCount当然会计算整个页面,隐藏和循环超出了应该处理的范围等等。

……

    var defaults = {
        displayCount: 2,
        startIndex: 0,
        panelClass: "panels",
        hoverClass: "hover",
        rounded: false
    },
    settings = $.extend({}, defaults, options);
        var panelCount = $("." + settings.panelClass).length; //needs restraints

我使用以下调用来确保链接工作。

$('.DisplayWall').metro({displayCount:2,hoverClass:"hover"}).css("color","red");

I have a fiddle here.


1
你可以将选择器作为参数传递给插件。这是文档中的建议:http://api.jquery.com/selector/。 - gen_Eric
像 http://jsfiddle.net/arunpjohny/RmwqL/1/ 这样? - Arun P Johny
4
为什么需要使用选择器?既然已经可以访问到元素本身,使用选择器反而会严重限制插件的功能。如果插件只能用于具有某个类的元素上,那么它只能在该元素上正常工作,而其他实例就无法作为独立的实例运行。 - Kevin B
1
或者为什么不尝试像 $('.next', this) 这样的东西呢? - gen_Eric
3
不明白?难道不只需要使用 $("." + settings.panelClass, this) 来将选择限制在传递给插件的元素上吗? - adeneo
感谢大家帮助我正确地完成了它。Kevin B的fiddle中使用的",this"和"$this"就是答案。Arun的fiddle已经完成了90%,但是选择器外面的".panels"被隐藏了。我曾考虑将选择器作为参数传递,但那似乎太冗余了。 - Joe Johnston
1个回答

2

this.selector的替代方法是不依赖于所使用的选择器,而是使用被选中的元素。因此,您应该重新实现this.each()并根据每个实例正确过滤您的选择。

this.each(function () {
    var $this = $(this);

    $('.next',this).click(function () {

    $('.previous',this)

    $("." + settings.panelClass,this)

    //etc...

})

http://jsfiddle.net/y9pEV/8/

现在,如果您有两个DisplayWall元素,则它们将各自独立工作。

不要忘记,在SetDisplay内部,this是Window。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接