javascript поиск и замена страниц - PullRequest
1 голос
/ 02 марта 2011

Я не гуру 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") return NaNпри попытке parseFloat ($ 1) * 0,85 тоже не дает правильных результатов Может кто-нибудь посоветовать?Спасибо.

Ответы [ 2 ]

3 голосов
/ 02 марта 2011

Вы, вероятно, не хотите брать HTML-код всей страницы и заменять его обновленным HTML-кодом, поскольку все элементы разрушаются и воссоздаются, что имеет значение для обработчиков событий и т. П.

Бывает, что только вчера я ответил на этот другой вопрос здесь . Ответ может быть легко применен к вашей ситуации.

Обновление : Поскольку вы не перемещаете результат в новый элемент, код на самом деле становится проще:

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;
  }
}

Живой пример

Обратите внимание, что я немного изменил регулярное выражение, вы можете помассировать его до тех пор, пока вы не захотите. Но я хотел сопоставлять десятичные точки только тогда, когда следуют цифры. (Стоит отметить, что не все культуры используют . в качестве десятичной точки, но вы, кажется, в своем примере, так что ...)

2 голосов
/ 02 марта 2011

это должно быть чем-то вроде этого,

var x = $ ('body'). Html ();

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

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

, если вы не учитываете события и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...