从dom文本中删除美元符号 - 而不是从js代码中删除

时间:2014-11-25 10:47:47

标签: javascript jquery

我正在尝试用另一个字符串替换网页中所有出现的'$'(美元符号)。
问题是可能有一些<script>标签可能包含我不想改变的'$'(jQuery代码)。

例如:
document.body.innerHTML = document.body.innerHTML.replace(/\$/g, 'xxx');似乎有效,但也会替换<script>$('...')...</script>部分中的'$'。

这可以实现吗?

提前谢谢。

编辑:我无法修改页面生成方式或更改所有其他js部分 - 也不能使用某些服务器端逻辑。我只能添加一些自定义的js代码

2 个答案:

答案 0 :(得分:1)

您可以过滤掉脚本代码

[].slice.call(document.body.children).forEach(function(element) {
    if ( element.tagName.toLowerCase() != 'script' ) {
        element.innerHTML = element.innerHTML.replace(/\$/g, 'xxx');
    }
});

FIDDLE

这不是递归的,这意味着它只适用于body标签下的脚本标签,而不是嵌套更深的脚本标签

答案 1 :(得分:0)

function textNodes(main) {
    var arr = [];
    var loop = function(main) {
        do {
            if(main.hasChildNodes() && (["STYLE","SCRIPT"].indexOf(main.nodeName)==-1)){
                loop(main.firstChild);
            } else if(main.nodeType === 3) {
                arr.push(main)
            }

        }
        while (main = main.nextSibling);
    }
    loop(main);
    return arr;
}
textNodes(document.body).forEach(function(a){a.textContent=a.textContent.replace(/\$/g,'€')});

基于此DOM walking example