2011-01-19 3 views
1

Я пытаюсь снова заменить каждый текстовый контент каждого элемента управления на странице с помощью javascript и jquery.Заменить содержимое каждого элемента управления HTML javascript jquery

Мне нужно искать в каждом текстовом содержимом (БЕЗ МОДИФИКАЦИИ ТЕГИ, ТОЛЬКО ТЕКСТ) любое слово и заменять его другим словом.

Одна попытка является:

jQuery.fn.replaceEachOne = function (objective, rep) { 
    this.each(function(){ 
       //$(this).html($(this).html().replace(new RegExp('(\\s'+objective+'\\s(?![[\\w\\s?&.\\/;#~%"=-]*>]))', "ig"), rep)); 
    $(this).html($(this).html().replace(new RegExp('('+objective+'(?![[\\w\\s?&.\\/;#~%"=-]*>]))', "ig"), rep)); 
      } 
     ); 
} 

Пожалуйста, помогите !!

ответ

1

Что-то вроде этого следует сделать трюк:

$.fn.replaceEachOne = function(search, replace) { 
    this.contents().each(function(){ 
     if (this.nodeType == Node.ELEMENT_NODE) { 
      $(this).replaceEachOne(search, replace); 
     } else if (this.nodeType == Node.TEXT_NODE) { 
      this.nodeValue = this.nodeValue.replace(search, replace); 
     } 
    }); 
}; 

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

+0

То работа, но я должен добавить новый элемент управления в finded текста, я имею в виду добавить: <метка Color = "..."> Finded Текст и если Я делаю это таким образом, что браузер не распознает его как контроль, только как текст, я имею в виду, он выглядит текстовым не классный ярлык с другим цветом ... :( help !! – Caipivara

+0

@ Daniel GR Звучит так, как будто вам нужен [плагин подсветки] (http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html). – lonesomeday

0

Я хотел бы начать с чем-то вроде этого:

jQuery.fn.replaceEachOne = function(objective, rep) { 
    var html = jQuery(this).html(); 
    var simpleRegexp = new RegExp(objective, "gi"); 
    var regexp = new RegExp(">[^><]*?"+objective+"[^><]*?<","gi"); 
    html = html.replace(regexp, function(match) { 
     return match.replace(simpleRegexp, rep); 
    }); 
    jQuery(this).html(html); 
} 

Этот код находит текст, соответствующий в HTML код тела Разногласия между '>' и '<' символов, а затем заменяет совпавший текст.

Конечно, это простое решение, и оно заменит текст также в <script> или <style> блоках. Я думаю, что это хорошая идея.

+0

Но проблема в том, что я не хочу добавлять контент в <> Мне нужно добавить контент в <> ЗДЕСЬ – Caipivara

+0

Я написал «beetween»> и «<», а не «beetween» <' and '> ». Порядок важен. –

+0

Hm thats true;) – Caipivara

0

Наконец ...

jQuery.fn.replaceEachOne = function (objective, reposition) { 
    this.contents().each(function(){ 
     if (this.nodeType == Node.ELEMENT_NODE) { 
      $(this).replaceEachOne(objective, reposition); 
     } else if (this.nodeType == Node.TEXT_NODE) { 
      var label = document.createElement("label"); 
      label.innerHTML = this.nodeValue.replace(objective, reposition); 
      this.parentNode.insertBefore(label, this); 
      this.parentNode.removeChild(this); 
     } 
    }); 
} 
Смежные вопросы