使用jQuery转换英语拉丁语数字

时间:2015-06-28 14:43:01

标签: javascript jquery

我需要将身体中的所有英语/拉丁语数字更改为波斯语数字。为此,我有这个代码:

$(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时,我的代码不会将拉丁数转换为波斯数。

我该如何解决这个问题?

DEMO

2 个答案:

答案 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);