2016-01-28 71 views
1

我試圖使用jQuery的TableSorter插件,來排序的,我通過查詢與PHP MySQL數據庫創建書一表。變化的tablesorter排序標準

該表最初由MySQL引擎(查詢中的ORDER BY Book.Title)按標題排序,然後用戶可以通過TableSorter以不同方式對錶進行排序(頁數,作者姓名,出版日期,& c )。

的事情是,有些書必須以數字開頭的名稱(如「1984」或「20.000聯盟在海」)。在任何以字母開頭的其他書籍之前,MySQL會將這些書放在最前面。我有這個沒有爭吵,但一個奇怪的「錯誤」(不是一個真正的錯誤也許)用的tablesorter出現:它只是排序起始號,標題(從表中的beggining到底換擋它們),留下其餘的(和絕大多數)的訂單不變。我認爲我已經查明瞭問題的根源,但還找不到(真實的)解決方案:

看起來TableSorter只看第一行以確定列的類型並將其視爲因爲第一個元素是一個標題以數字開頭的書,所以它忽略了任何以字母字符開頭的單元格。如果我扭轉了原來的排序順序(改變MySQL查詢結局ORDER BY Book.Title DESC),那麼第一個元素是一本書開頭字母(Z或最近的一個),的tablesorter認爲它是字母數字列並對其排序,就好了,但隨後桌子呈現給用戶一種不尋常和尷尬的順序。

對於那些誰有同樣的問題(我不認爲我碰到這第一個,但我無法找到與這個「錯誤」的任何信息,也沒有辦法解決它) ,我設法想出速戰速決:把一個隱藏的行第一,迫使每列的分類標準,以正確的,就像這樣:

<tr> 
     <td class = "row-hidden">ABC</td> <!-- Title --> 
     <td class = "row-hidden">ABC</td> <!-- Subtitle --> 
     <td class = "row-hidden">ABC</td> <!-- Author --> 
     <td class = "row-hidden">123</td> <!-- Pages --> 
     <td class = "row-hidden">123</td> <!-- Quotes --> 
     <td class = "row-hidden">01/01/1970</td> <!-- Publication Date --> 
     <td class = "row-hidden"></td> <!-- No Sorting Required --> 
    </tr> 

但是,這僅僅是一個旁路,我想知道是否有到解決實際問題的一種方式,基本上問題是這樣的:有(通過jQuery)手動從而重寫什麼解析器自動決定辦法迫使/設置任何給定的列的排序標準??

回答

0

的tablesorter試圖通過從第一行和掃描開始向下直到解析器之一命中的匹配,以確定包含在列的數據的類型。它不應該,但是當它看到「20.000聯賽......」它認爲它在看數字只有數據,所以解析器被設置爲「數字」。

要覆蓋此行爲,設置該列headers選項。一旦設置,列數據不再被自動檢測。

$('table').tablesorter({ 
    headers : { 
    // using a zero-based column index 
    0 : { sorter: 'text' } 
    } 
}); 

如果你有興趣,我也有一個fork of tablesorter,其中包括,但仍然需要加載一個ignore leading articles parser忽略重要文章「A」的正確排序標題,「一個」和「」 。其他語言也被支持。