2014-11-25 46 views
1

我試圖用另一個字符串替換網頁中出現的所有'$'(美元符號)。
問題是,可能有一些<script>標籤可能包含'$'(jQuery代碼),我不想更改。從dom文本中刪除美元符號 - 不是從js代碼

例如:
document.body.innerHTML = document.body.innerHTML.replace(/\$/g, 'xxx');似乎工作,但也取代任何<script>$('...')...</script>部分的'$'。

這是可以實現的嗎?

預先感謝您。

編輯:我無法修改生成頁面的方式或更改所有其他js部分 - 既不使用某些服務器端邏輯。我只能添加一些自定義的JS代碼

+0

您可以將腳本放在頁腳或標籤中,因爲您正在獲取body的html – 2014-11-25 10:48:57

+0

您是否可以專門定位需要此替換的元素?或者更好的是,在呈現HTML之前在服務器上進行替換。 – 2014-11-25 10:50:21

+0

嗨@MohitArora,感謝您的評論。我無法修改頁面生成的方式,我只能放一些額外的自定義JavaScript。 – CrisDeBlonde 2014-11-25 10:50:28

回答

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

1

您可以過濾掉script標籤

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

FIDDLE

這不是遞歸的,這意味着它僅適用於腳本直屬機構標記標籤,不是嵌套腳本標記更深