【问题标题】:What replaces the deprecated property this.selector什么取代了不推荐使用的属性 this.selector
【发布时间】:2014-02-09 21:00:41
【问题描述】:

在创建我的第一个 jQuery 插件时,我想在插件代码中使用仅限于最外层选择器的选择器。 this.selector 非常完美。然而,它正在被拿走。 :/ 因此,我不想编写折旧的属性,而是要使用最佳实践。

我想确保我只影响选择器中的项目。现在我的插件已经疯狂溢出了。我的 var 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");

我有一个fiddle here

【问题讨论】:

  • 您可以将选择器作为参数传递给插件。这是来自文档的建议:api.jquery.com/selector
  • 为什么需要选择器?您可以访问元素本身。使用选择器会严重限制插件的功能。如果用在一个有类的元素上,一下子就只能用在那个元素上,其他的实例就不能作为单独的实例了。
  • 或者为什么不试试$('.next', this)之类的?
  • 我不明白?难道不只是$("." + settings.panelClass, this) 将选择限制为传递给插件的元素吗?

标签: jquery jquery-plugins jquery-selectors


【解决方案1】:

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2011-10-12
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2016-02-23
    • 2017-11-04
    相关资源
    最近更新 更多