JQuery更改所有元素文本

时间:2011-03-31 01:03:56

标签: jquery regex replace

我需要jquery来更改所有页面中的数字。例如,我想改变1比1,所以我尝试这样:

$("*").each(function(){
    $(this).html(  $(this).html().replace(1,"۱")  );
})

但这也将改变css规则和属性。有什么技巧可以逃脱css和属性吗?

3 个答案:

答案 0 :(得分:9)

这不是jQuery自然适合的工作。不是让jQuery获取所有元素的平面列表,而是自己递归遍历DOM树,搜索文本节点以执行替换。

function recursiveReplace(node) {
    if (node.nodeType == 3) { // text node
        node.nodeValue = node.nodeValue.replace("1", "۱");
    } else if (node.nodeType == 1) { // element
        $(node).contents().each(function () {
            recursiveReplace(this);
        });
    }
}

recursiveReplace(document.body);

在行动here中查看。

答案 1 :(得分:2)

试试这个:

$("body *").each(function() { 
    if ( this.childElementCount > 0 ) { return; }
    $(this).text(function(i, v) { return v.replace('1','۱'); }); 
});

更新:不起作用...

答案 2 :(得分:1)

如果没有看到代码的实际示例,很难提供一个好的答案,但我会尽力而为。

这是我要做的。我会将所有页码都包含在带有特定ID的标签中,例如......

<span class="pageNumber">1</span>
...
<span class="pageNumber">n</span>

然后是jQuery ......

$.each($("span#pageNumber"), function()) {
    $(this).text('value');
});

您可以增加循环中的值以计算页数或其他任何您想要的值!

希望有所帮助,
spryno724