2007年7月20日 星期五

如何用javascript做中文排序

巴豆夭在新增學校以及店家資料的時候,不是以字的筆劃做排序,而是以新增時間的先後做排序,所以使用者在搜尋學校和店家資料的時候會變的非常不方便。

所以我找了蠻多的資料,看看能不能在client端用javascript來做排序。不在server端用php做排序的原因,當然是為了怕server的loading變大,所以把這些資料抓回來用javascript做排序。

看了這兩篇「JavaScript中实现数组的排序、乱序和搜索。」和「利用JavaScript的sort()对包含汉字字符串数组进行排序」之後,才知道javascript有localeCompare()這種函式可以拿來做本地化的字串比較。

localeCompare的使用方法就是像這樣:
ret = '國立宜蘭大學'.localeCompare('國立台灣大學')

原始字串(國立宜蘭大學)跟要比較的字串(國立台灣大學)做比較,如果原始字串比較小的話,則ret就會傳回小於0的數字;如果比較大的話,則傳回大於0的數字;如果相等就傳回0。

可是我在使用這個函式的時候,結果跟我想要的不太相同,因為我是想用中文字的筆劃來做排序,可是最後排出來的時候「大同大學」卻排在「國立宜蘭大學」的後面,實在很奇怪耶。

後來我又在石頭閒語看到了這篇文章「以動態網頁方式排序網頁的表格內容」之後,才了解這個問題目前好像是無解,我猜也許是因為unicode的關係吧(昏)。

後記:在IE上可以用筆劃做排序,可是在Firefox和Opera上卻不是如此,不知道Firefox和Opera依照的是什麼規則。

參考資料:
巴豆夭
JavaScript中实现数组的排序、乱序和搜索。
利用JavaScript的sort()对包含汉字字符串数组进行排序.
石頭閒語 - 樂多閒語
石頭閒語:以動態網頁方式排序網頁的表格內容 - 樂多日誌

1 則留言:

訪客 提到...

非常有用,感激賜教!