2011-03-02 64 views
1

我不是的JavaScript的大師,所以不要怪我了。 我的任務是查找和替換HTML頁面內的文字,所以每一個數量應該與它的值乘以一定量代替。 例如123 - > 104.55(123 * 0.85),245 - > 208,25(245 * 0.85)等 目前我的代碼就像下面:的JavaScript的網頁內搜索和替換

$('body').html(
     $('body').html().replace(/([0-9\.]+)/g, eval("$1*0.85")) 
); 

的eval( 「$ 1 * 0.85」)返回NaN的同時努力parseFloat($ 1)* 0.85也不會返回正確的結果 有人能指教? 謝謝。

回答

2

應該是某事像這樣,

變種X = $('體「)的.html();

x = x.replace(/([0-9。] +)/ g,function(x){return x * 0.85;}); 。

$( '主體')HTML(X);

如果不考慮事件等

+0

感謝您的回答 - 像魅力一樣工作。 – zergussino

+2

@zergussino:這是可行的,但是請注意,您可能會通過徹底拆除和重建頁面來弄亂事件處理程序。在'body'元素上使用'html()'是一個很大的錘子。 –

+0

@ T.J。 Crowder我同意,給你一個+ – Zer001

3

您可能不希望將整個頁面的HTML替換爲更新後的HTML,因爲所有元素都會被拆除並重新創建,這對於事件處理程序等具有影響。

碰巧就在昨天我answered this other question here。答案很容易適用於你的情況。

更新:既然你不動,結果到一個新的元素,代碼實得簡單:

walk(document.body); 

function walk(node) { 
    var child; 

    switch (node.nodeType) { 
    case 1: // Element 
     for (child = node.firstChild; 
      child; 
      child = child.nextSibling) { 
     walk(child); 
     } 
     break; 

    case 3: // Text node 
     node.nodeValue = node.nodeValue.replace(
     /[0-9]+(?:\.[0-9]+){0,1}/g, 
     function($0) { 
      msgs.push($0); 
      var num = parseFloat($0, 10); 
      if (isNaN(num)) { 
      return $0; 
      } 
      return num * 0.85; 
     } 
    ); 
     break; 
    } 
} 

Live example

請注意,我已經修改了正則表達式了一下,你可能想按摩它,直到它是你想要的。但我只想在數字後面跟小數點匹配。 (值得注意的是,並非所有的文化用.作爲小數點,但你似乎在你的榜樣,所以......)

+0

感謝尖。 – zergussino

+0

@zergussino:我拍了第一個嘗試吧;無論如何,這足以讓你繼續前進,並且它可以處理我扔給它的測試數據。 –