js包括中文字符串的比较

基于jquery的使ListNav兼容中文首字拼音排序的实现代码
[url]http://www.jb51.net/article/27643.htm[/url]
它是使用[color=darkblue]jquery.charfirst.pinyin.js[/color]工具

原文[color=darkblue][b]localeCompare[/b][/color]

[url]http://kewang.pixnet.net/blog/post/6574774-%E5%A6%82%E4%BD%95%E7%94%A8javascript%E5%81%9A%E4%B8%AD%E6%96%87%E6%8E%92%E5%BA%8F[/url]
巴豆夭在新增學校以及店家資料的時候,不是以字的筆劃做排序,而是以新增時間的先後做排序,所以使用者在搜尋學校和店家資料的時候會變的非常不方便。

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

看了這兩篇「JavaScript中实现数组的排序、乱序和搜索。」[url]http://blog.iyi.cn/hily/archives/2005/09/javascript.html[/url]和「利用JavaScript的sort()对包含汉字字符串数组进行排序」[url]http://blog.iyi.cn/hily/archives/2005/10/javascriptsort.html[/url]之後,才知道javascript有localeCompare()這種函式可以拿來做本地化的字串比較。

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

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

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

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

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


[color=darkblue][b]JavaScript localeCompare() 方法[/b][/color]
[url]http://www.w3school.com.cn/js/jsref_localeCompare.asp[/url]
定义和用法
[b][color=red]用本地特定的顺序来比较两个字符串[/color][/b]。
语法
stringObject.localeCompare(target)

参数 描述
target 要以本地特定的顺序与 stringObject 进行比较的字符串。
返回值
说明比较结果的数字。如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。
说明
把 < 和 > 运算符应用到字符串时,它们只用字符的 Unicode 编码比较字符串,而不考虑当地的排序规则。以这种方法生成的顺序不一定是正确的。例如,在西班牙语中,其中字符 “ch” 通常作为出现在字母 “c” 和 “d” 之间的字符来排序。
localeCompare() 方法提供的比较字符串的方法,考虑了默认的本地排序规则。ECMAscript 标准并没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。
实例
在本例中,我们将用本地特定排序规则对字符串数组进行排序:
var str;
str.sort (function(a,b){return a.localeCompare(b)})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值