2013-08-20 17 views
2

你肯定已經看過jQuery。有你知道的jQuery讓你做出方法的鏈接是這樣的:(?)如何使鏈接方法,但同時返回超過3個值

$('.elements').css({color:'red'}).etc().etc()... 

但如果你注意到,該函數將返回對象的數組:

$(document).ready(function(){ 
    var $elements = $('.c').css({color:'red'}); 
    console.log($elements); 
}); 

Example, see console to see the result

另外,$功能確實還有:

$(document).ready(function(){ 
    var $elements = $('.c'); 
    console.log($elements); 
}); 

Example, see console to see the result

兩者都返回一個數組,然後可以保持鏈接。這怎麼可能?爲什麼在不返回時只能保持鏈接this(或對象本身)?

我讀this post他可以成功添加加號,但這是對現有的字符串,因爲他原來的字符串對象。

它有什麼辦法可以歸檔嗎?

UPDATE

我知道,它返回一個jQuery對象,但我怎麼能返回我的對象​​,其中包含值的數組,並保持與返回的值鏈接。

更新2

我想要什麼存檔

我有這個類,我想一個方法返回我的對象​​的數組時,如果鏈接它對

var elements = Enumerable(anArray).Where(function(elements){ return elements != 1 }) 

這裏的chainig已經結束了,所以它必須返回滿足條件的元素,但我想繼續chaingin我只需要這樣做:

elements = elements.Where(function(elements){ return elements == 1}).Take(3); 

並保持鏈接作爲looooong我想要的。

+2

我不太清楚你的目標是什麼,或者你在問什麼。另外,它們並沒有真正返回一個數組,它們正在返回一個jQuery對象,其中有一個數組。 – smerny

+0

即時通訊的內容,如何返回我的對象​​數組以及什麼是值,並保持鏈接。我只是知道要通過返回這個,但不是一個數組 – NewBiw

+0

爲什麼?你可以很容易地從jquery對象中過濾元素,甚至可以抽取特定的元素...並循環獲取每個值。我認爲你需要展示你的最終目標,以便我們能夠進一步幫助你。 – smerny

回答

1

$不返回陣列,它返回一個jQuery object,這是一個陣列狀對象。即它的一些屬性有數字名稱,它有一個length屬性。

實施例:

var obj = { 
    0: element1, 
    1: element2, 
    find: function() { 
     // some logic 
     return this; // return a reference to itself for chaining 
    }, 
    length: 2 
}; 

現在,一個jQuery方法不返回this,它返回其暴露相同的接口(顯然)一個新的jQuery對象,並因此允許鏈。

如果要自己實現鏈接,則必須執行下列操作:返回this或對象的新實例,並使用當前對象的數據對其進行初始化。

實施例:

function Constr(data) { 
    this.data = data || {}; 
} 

Contr.prototype.chain = function() { 
    // do stuff 
    console.log(this.data); 
    return new Constr(this.data); 
    // or return this; 
}; 

var obj = new Constr({foo: 'bar'}); 
obj.chain().chain().chain(); 
+0

請參閱我的更新2請 – NewBiw

+0

是的,我作爲示例提供的示例也適用於此用例。再次:返回「this」或者你的「class」的新實例。 –

+0

你說得對,現在我看仔細我意識到 – NewBiw

0

jQuery對象實際上是HTML對象的集合,所以當一個函數返回一個jquery對象它實際上返回多於一個的元件。

var ChainableObject = { 
    data: [], 
    where: function(fn){ 
     //doStuff with this.data 
     return this; 
    }, 
    take: function(n){ 
     //doStuff with this.data 
     return this; 
    }, 
    // and so on 
    //......... 
} 
+0

看到我更新2,請 – NewBiw

+0

@NewBiw:看看我的更新答案,我希望它能幫助。 – amdorra

+0

哦,男人,你救了我!這就是答案!我會接受你的回答,但我沒有聲望enougt到:( – NewBiw

相關問題