2012-08-07 71 views
1

我目前正在爲奧運會制定一個替代獎牌計數並使用tablesorter插件爲用戶提供能力從不同的角度來看待數據。jQuery tablesorter:排列優先順序(如獎牌計數:第一金,然後是銀,然後是青銅)

我堅持在這一點,它涉及到正確的行順序:如果兩個國家有相同數量的金牌,你看看銀牌。獲得更多銀牌的國家獲得第一名,銀牌獲得最少的國家獲得第二名。

如何在tablesorter的幫助下實現這一目標?

你可以看看源在http://www.benedictzinke.de/olympia

現在它每10名運動員金牌後進行排序。對於贏得至少一枚金牌的國家來說,這一切都很順利。但沒有金牌的國家排成一行。

回答

0

我認爲最簡單的解決方案是隱藏勳章欄中的加權勳章值。

例如,讓我們看看韓國與羅馬尼亞。我已經包含在括號內它們基本上每種類型的獎牌,包括前導零的數目加權值(因此「2」變成「002」)

Country G (gggsssbbb) S (sssgggbbb) B (bbbgggsss) 
Korea 12 (012005006) 5 (005012006) 6 (006012005) 
Romania 2 (002005002) 5 (005002002) 2 (002012002) 

現在,如果我們梳理了銀牌列,你會看到韓國的005012006大於羅馬尼亞的,並將在羅馬尼亞之前對韓國進行分類。

現在的代碼將所有這一切之前,我們甚至打電話的tablesorter和demo

$('#medal_count').find('tbody tr').each(function(){ 
    var pref = '<span style="display:none">', // span that hides the weighted value 
     suff = '</span>', 
     $t = $(this), 
     $c = $t.children(), 
     gold = ("000" + $c.eq(4).text()).slice(-3), // add leading zeros 
     silver = ("000" + $c.eq(5).text()).slice(-3), 
     bronze = ("000" + $c.eq(6).text()).slice(-3); 
    // add hidden weighted medal values 
    $c.eq(4).prepend(pref + gold + silver + bronze + suff); 
    $c.eq(5).prepend(pref + silver + gold + bronze + suff); 
    $c.eq(6).prepend(pref + bronze + gold + silver + suff); 
}); 

$("#medal_count").tablesorter({ 
    textExtraction : function(node){ 
     var $n = $(node); 
     // only return the weighted values if a span exists 
     return ($n.find('span').length) ? 
      $n.find('span').text() : 
      $n.text(); 
    }, 
    sortList: [[8, 1]] 
}); 
+0

您好,感謝您的答覆。這兩個答案都非常有用。 hradac:我會毫不猶豫地看看後面項目的自定義解析內容,但我認爲它在這種特殊情況下不會起作用,因爲這些值已經是數字,因此可以通過內置解析器進行排序。 fudgey:感謝這種方法和您的全面解釋。看起來像一個易於實施的方式。我會試一試。 – zinky 2012-08-10 09:28:39

+0

再次感謝,我終於有一段時間來實施「體重」跨度。它對我來說非常合適。 – zinky 2012-08-14 15:11:22

0

使用tablesorter插件,你應該參考如何編寫自己的解析器的文檔。在此處查看:http://tablesorter.com/docs/example-parsers.html

您要求的內容似乎幾乎完全符合文檔中使用的示例。爲方便起見,下面複製了文檔中的代碼。

// add parser through the tablesorter addParser method 
$.tablesorter.addParser({ 
    // set a unique id 
    id: 'grades', 
    is: function(s) { 
     // return false so this parser is not auto detected 
     return false; 
    }, 
    format: function(s) { 
     // format your data for normalization 
     return s.toLowerCase().replace(/good/,2).replace(/medium/,1).replace(/bad/,0); 
    }, 
    // set type, either numeric or text 
    type: 'numeric' 
}); 

$(function() { 
    $("table").tablesorter({ 
     headers: { 
      6: { 
       sorter:'grades' 
      } 
     } 
    }); 
}); 

你的目的的代碼是這樣的:

// add parser through the tablesorter addParser method 
$.tablesorter.addParser({ 
    // set a unique id 
    id: 'medals', 
    is: function(s) { 
     // return false so this parser is not auto detected 
     return false; 
    }, 
    format: function(s) { 
     // format your data for normalization 
     // Note the 'i' added after the medal type, that makes it case insensitive. 
     return s.toLowerCase().replace(/gold/i,2).replace(/silver/i,1).replace(/bronze/i,0); 
    }, 
    // set type, either numeric or text 
    type: 'numeric' 
}); 

$(function() { 
    $("table").tablesorter({ 
     headers: { 
      6: { // Replace '6' with the number of the column that your medals are in 
       sorter:'medals' 
      } 
     } 
    }); 
}); 
相關問題