javascript页内搜索和替换

时间:2011-03-02 08:40:48

标签: javascript replace

我不是javascript的大师,所以不要责怪我。 我的任务是在html页面中查找和替换文本,因此每个数字都应该替换为它的值乘以某个数量。 例如123 - > 104.55(123 * 0.85),245 - > 208,25(245 * 0.85)等 目前我的代码如下:

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

eval(“$ 1 * 0.85”)在尝试parseFloat($ 1)时返回NaN * 0.85也没有返回正确的结果 有人可以提供建议吗? 感谢。

2 个答案:

答案 0 :(得分: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

请注意,我已经对regexp进行了一些修改,你可能想按摩它直到你想要它为止。但我只想在数字后面跟小数点匹配。 (值得注意的是,并非所有文化都使用.作为小数点,但您似乎在您的示例中,所以......)

答案 1 :(得分:2)

它应该是这样的,

var x = $('body')。html();

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

$( '主体')的HTML(X);

如果你不考虑事件等,