2014-01-20 47 views
3

在創建我的第一個jQuery插件時,我想使用限制在最外層選擇器內的插件代碼中的選擇器。 this.selector是完美的。然而,它被帶走了。 :/因此,我不想編寫折舊的財產,而是想使用最佳做法。什麼替換不推薦使用的屬性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

+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是Window。

相關問題