Работает что-то вроде:

Document.body.innerHTML = document.body.innerHTML.replace («старое значение», «новое значение»)

Опасно?

Я обеспокоен тем, что, возможно, некоторые браузеры могут испортить всю страницу, и, поскольку это код JS, который будет размещен на сайтах, находящихся вне моего контроля, его может посетить тот, кто знает, какие браузеры меня немного волнуют.

Моя цель - только найти вхождение строки во всем теле и заменить ее.

5
MB. 23 Июл 2010 в 20:54

3 ответа

Лучший ответ

Определенно потенциально опасно - особенно если ваш HTML-код сложный или если это чужой HTML-код (т.е. это CMS или создаваемый вами повторно используемый JavaScript). Кроме того, он уничтожит любые списки событий, которые вы установили для элементов на странице.

Найдите текстовый узел с XPath, а затем сделайте замену прямо на нем.

Примерно так (совсем не проверено):

var i=0, ii, matches=xpath('//*[contains(text(),"old value")]/text()');
ii=matches.snapshotLength||matches.length;
for(;i<ii;++i){
  var el=matches.snapshotItem(i)||matches[i];
  el.wholeText.replace('old value','new value');
}

Где xpath() - это настраиваемая кросс-браузерная функция xpath, которая выглядит следующим образом:

function xpath(str){
  if(document.evaluate){
    return document.evaluate(str,document,null,6,null);
  }else{
    return document.selectNodes(str);
  }
}
6
lucideer 23 Июл 2010 в 17:19

Я согласен с lucideer : вы должны найти узел, содержащий искомый текст, а затем выполнить замену. Каркасы JS делают это очень легко. Например, jQuery имеет мощный селектор : contains ('your text')

http://api.jquery.com/contains-selector/

3
Java Drinker 23 Июл 2010 в 17:03

Если вы хотите надежное решение, вы должны перебрать DOM и найти значение, которое можно заменить таким образом.

Однако , если «старое значение» - это длинная строка, которую никогда нельзя смешать со значением тега, атрибута или атрибута, вы относительно безопасны, просто выполнив замену.

0
vava 23 Июл 2010 в 17:03