2014-01-20 2 views
3

При создании моего первого плагина jQuery я хочу использовать селектор внутри кода плагина, который ограничивается самым внешним селектором. это.selector - безупречный. Его, однако, уводят. :/Поэтому вместо того, чтобы кодировать амортизированное свойство, я хочу использовать наилучшую практику.Что заменяет устаревшее свойство 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"); 

У меня есть fiddle here.

+1

Вы можете просто передать селектор в плагин в качестве параметра. Это предложение из документов: http://api.jquery.com/selector/ –

+0

нравится http://jsfiddle.net/arunpjohny/RmwqL/1/? –

+4

Зачем вам нужен селектор? у вас есть доступ к самому элементу. Работа с селектором сильно ограничивает функциональность вашего плагина. Если он используется для элемента с классом, он внезапно может быть правильно использован только для одного элемента, дополнительные экземпляры не будут работать как отдельные экземпляры. –

ответ

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 есть окно.

Смежные вопросы