jQuery:快速汉字转拼音
首先用正则表达式(/[\u4e00-\u9fa5]/g)找出汉字,然后逐一在汉字列表(simp_chinese_chars)中查找,得出各汉字位于列表的位置(simp_chinese_chars.indexOf(w)),然后通过switch…case…得出对应的拼音,再按“Case”选项(switch(options['case'])),输出小写、大写或者首字母大写的写法。因为IE浏览器的问题,会将object里面的case误以为是switch里面的case,所以要将object里面的case加上引号,引用的时候也不能用options.case,而要用options['case']。
得出每个字的拼音后,在通过连字符(options.hyphen)将其连接。得出转换后的字符串之后,再检查标点符号和全角符号,可以选择删除(remove)、转换(replace)或者保留(ignore/reserve)。最后免不了字符串最后的连字符,顺便把它删除掉。因为IE浏览器,所以不能用substr取负数,所以用了slice。
这个插件可以对DOM或者字符串生效。当对象是DOM时,可以按每个DOM执行,然后结果分配给任意其他DOM(设置target),插件会自动检测使用val()还是html(),因为使用val()的只有input、textarea和select。当对象是字符串时就要新建一个prototype,如下:
String.prototype.hanzi2pinyin=function(options){
return $.fn.hanzi2pinyin.apply(this,[options]);
};
注意options要加上一个中括号,示意options只是arguments的其中一员。字符串的时候,target也是有效的。
展望:可能会新增其他版本,如包含所有中文字、包含声调的拼音等等。但是代码的大前提还是简洁、快速、优雅。
30日,新增了 jquery-hanzi2pinyin.all.js ,包含了简繁体中文和带声调的拼音,新的DEMO也可以两个版本互换定制。
用法如下:
$('#zh,#case,#hyphen,#pm,#fc').bind('keyup change',function(){
$('#zh').hanzi2pinyin({
target: '#py, #py2, #py3, #py4',
'case': $('#case').val(),
hyphen: $('#hyphen').val(),
punctuation_marks: $('#pm').val(),
fullwidth_chars: $('#fc').val()
});
$('#py5').text($('#sh').text().hanzi2pinyin({
'case': 'proper'
}));
$('#code').text(".hanzi2pinyin({\r\n\ttarget: '',\r\n\t'case': '" + $('#case').val() +
"',\r\n\thyphen: '" + $('#hyphen').val() + "',\r\n\tpunctuation_marks: '" + $('#pm').val() +
"',\r\n\tfullwidth_chars: '" + $('#fc').val() + "'\r\n}");
}).trigger('keyup');
源代码:jquery-hanzi2pinyin.simp.js
No related posts.
