2013-02-05 36 views
6

我最近遇到了一個我不得不使用的代碼示例,我能夠使用它,但我並不完全明白髮生了什麼,我不喜歡那樣。

下面是部分代碼:

.sortElements(function(a, b){ 
    return $.text([a]) > $.text([b]) ? 
     inverse ? -1 : 1 
     : inverse ? 1 : -1; 
} 

我知道這個功能是決定哪些元素應該進行排序先出的A和B,我知道逆決定着排序順序,但我不知道$ .text([a])在做什麼。它解析「a」作爲文本類似parseInt(a)和Date.parse(a)?

我問過谷歌,它不會告訴我任何事情,可能是因爲它不喜歡搜索符號和點,或者可能因爲我不知道如何使用谷歌來搜索符號和點。我也看過jQuery網站,我發現的是$(selector).text()/ $(selector).text(newText)函數。

這裏的的jsfiddle我立足我的代碼:http://jsfiddle.net/gFzCk/

+3

您使用哪些插件? jQuery根本沒有'jQuery.text'函數(至少,沒有*記錄*)。 (它具有jQuery *實例的'text'功能,但這是不同的。) –

+0

它使用變量創建一個數組,因爲它只有值 - 爲什麼是一個很好的問題。 – h2ooooooo

+3

它看起來像jQuery中的一個未公開的函數,用於從元素中獲取文本,而不需要包含它們的jQuery對象。因此,假設'a'是一個內部含有文本的DOM節點,'$(a).text()'和'$ .text([a])'是等價的。看[這個jsFiddle示例](http://jsfiddle.net/eCwRZ/)。 –

回答

7

檢查的jQuery source將揭示該$(selector).text(),你是熟悉的,使用$.text內部:

​​

它是一個未公開的函數(這意味着更多的jQuery修訂版可能會隨意刪除它,而不會通知您)。你會發現它的定義爲這樣:

jQuery.text = Sizzle.getText; 

Sizzle.getText,反過來,被記錄爲「爲檢索DOM節點數組的文本價值效用函數」。看到Sizzle.getText是一個記錄的功能,我會推薦使用它,而不是jQuery速記,因爲我不希望jQuery很快就會放棄Sizzle。

這個函數是產生DOM節點文本內容的代碼片段。您的排序方法按照其文本內容的字母順序對DOM節點進行排序。我不知道作者爲什麼決定獲取僅包含一個元素([a])的數組文本,而不是立即傳遞元素(a),這同樣適用。

9

jQuery.text做爲implementation.text()方法繁重的 - 這似乎是與.text()核心功能的無證功能,但缺少一些jQuery波蘭語。

它是"imported" from Sizzle,它顯示爲Sizzle.getText

+0

+1是否有任何理由使用它而不是text()? –

+0

@RoyiNamir:理論上,您可以使用它來檢索DOM節點的文本,而不會產生創建jQuery對象來調用'.text()'的開銷。但實際上...我並不認爲這有多大的好處。 – Jon

1

如果上面的代碼確實有用(=沒有指出它根據jQuery文檔),那麼它可能調用.text()ab

我想知道爲什麼作者沒有使用$(a).text(),因爲應該做相同。也許代碼也可以不管是否a是一個jQuery包裹的節點或不: -/

2

看着你的jsfiddle後,它看起來是從一個元素中獲取文本的函數,類似於。文本()

console.log(a)登錄<td>28/02/2013</td>

雖然

console.log($.text[a])登錄28/02/2013

0

首先,括號。如果a是一個元素,則[a]是元素數組,因此對$.text(...)的調用正在傳遞一個數組作爲參數。

我找不到任何關於jQuery.text的文檔,但僅限於jQuery.fn.text。但是,您可以看到jQuery.text的實現將數組作爲參數以及標量值處理。

在這種情況下,$.text([a])可能與$.text(a)相同。