我需要将身体中的所有英语/拉丁语数字更改为波斯语数字。为此,我有这个代码:
$(document).ready(function () {
persian = {
0: '۰',
1: '۱',
2: '۲',
3: '۳',
4: '۴',
5: '۵',
6: '۶',
7: '۷',
8: '۸',
9: '۹'
};
function traverse(el) {
if (el.nodeType == 3) {
var list = el.data.match(/[0-9]/g);
if (list != null && list.length != 0) {
for (var i = 0; i < list.length; i++)
el.data = el.data.replace(list[i], persian[list[i]]);
}
}
for (var i = 0; i < el.childNodes.length; i++) {
traverse(el.childNodes[i]);
}
}
traverse(document.body);
});
这对我有用,但是当我添加jQuery Countdown时,我的代码不会将拉丁数转换为波斯数。
我该如何解决这个问题?
答案 0 :(得分:0)
这可能不是最佳解决方案,但您可以修改插件本身。可以修改方法digitChangeTo()
来切换波斯字符:
$.fn.digitChangeTo = function (digit, n, duration) {
if (!duration)
{
duration = 800;
}
if ($(digit + ' div.top').html() != n + '')
{
$(digit + ' div.top').css({'display': 'none'});
$(digit + ' div.top').html(persian[n]).slideDown(duration);
$(digit + ' div.bottom').animate({'height': ''}, duration, function(){
$(digit + ' div.bottom').html($(digit + ' div.top').html());
$(digit + ' div.bottom').css({'display': 'block', 'height': ''});
$(digit + ' div.top').hide().slideUp(10);
});
}
};
请记住,您必须将persian
数组添加到插件中。
您通常不应该修改插件,但出于性能目的,每秒修改字符是更糟糕的解决方案。
答案 1 :(得分:0)
你真的希望jquery为你做这个吗? 这是一段可以帮助您的JavaScript代码:
var map = ["\u0660","\u0661","\u0662","\u0663","\u0664", "\u0665","\u0666","\u0667","\u0668","\u0669"];
function replaceNumbers(node) {
if (node.nodeType==3) //Text nodes only
node.nodeValue = node.nodeValue.replace(/[0-9]/g, getArabicNumber);
}
function getArabicNumber(n) {
return map[parseInt(n,10)];
}
function walk(node, func) {
func(node);
node = node.firstChild;
while (node) {
walk(node, func);
node = node.nextSibling;
}
};
walk(document.body, replaceNumbers);