2011-03-02 21 views
1

私はjavascriptの専門家ではないので、私をあまり責めないでください。 私の仕事は、htmlページ内のテキストを検索して置き換えることです。したがって、すべての数値を値に乗算していく必要があります。例: javascriptのページ内検索と置換

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

にeval( "$ 1 * 0.85")のリターンはNaNをしようとしているとき:123 - - > 104.55(123 * 0.85)、245> 208,25(* 0.85 245)など は現在、私のコードは次のようなものですparseFloat($ 1)* 0.85も正しい結果を返しません 誰かに助言できますか?おかげさまで

答えて

2

(それはないすべての文化は、小数点として.を使用していることは注目に値しますが、あなたはあなたの例ではに見えたので...) ').html();

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

$( 'body').html(x);

イベントなどを考慮しない場合

+0

あなたの答えをありがとう - 魅力的なように働いた。 – zergussino

+2

@zergussino:それはうまくいきますが、ページを完全に解体して再構築することで、イベントハンドラを台無しにするかもしれないことにもう一度注意してください。 'body'要素に' html() 'を使うことは大きなハンマーです。 –

+0

@ T.J。私はあなたに+ – Zer001

3

すべての要素が破棄されて再作成されるため、ページ全体のHTMLを取得して更新されたHTMLに置き換えることは望ましくありません。これはイベントハンドラなどに影響します。

これはちょうど昨日起こるI 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

注意、あなたはそれがあなたがそれを望む方法までそれをマッサージしたいかもしれません。しかし、小数点の後に数字が続く場合にのみ、小数点を合わせたいと思っていました。

VARのx = $( 'ボディ、それはこのようなSTHでなければなりません

+0

チップのおかげで。 – zergussino

+0

@zergussino:私は最初にそれを刺しました。とにかく、あなたを動かすのに十分なほどです。そして、それが私が投げたテストデータで動作します。 –