2016-01-01 3 views
0

Я пытаюсь написать расширение chrome для замены всех конкретных вхождений текста на веб-странице с помощью специального текста.Заменить все текстовые вхождения в DOM с помощью jQuery

Я нашел похожие вопросы в SO и попробовал следующее решение, но он, похоже, не работает.

config.text_config = [ 
     { 
      src: "Lorem ipsum", 
      target: "live long and prosper" 
     } 
    ] 
    config.text_config.forEach(function (obj) { 

     $('*').each(function() { 
      var text = $(this).text().replace(obj.src, 'REPLACEMENT_TEXT'); 
      $(this).text(text); 
     }) 

    }); 

Может ли кто-нибудь мне помочь?

+0

_ «это не похоже на работу» _ Может включать stacksnippets на вопрос демонстрировать ? – guest271314

+0

Ну, я работаю над расширением хром. Как добавить фрагменты? :/ – Fawzan

+0

Требование _ «заменить все конкретные вхождения текста на веб-странице специальным текстом». _ Должен возвращать те же результаты, которые вызываются внутри хромного расширения или не вызываются в chrome-расширении. Может ли пример html попытаться изменить, который не возвращал ожидаемые результаты с помощью 'js' в Question? – guest271314

ответ

1

Вы можете сделать что-то вроде того, чтобы быть уверенным, чтобы заменить текст для всех узлов:

$(function() { 
 
    $.fn.getTextNodes = function(contentText) { 
 
    return $(this).find(":not(iframe)").addBack().contents().filter(function() { 
 
     return this.nodeType == 3 && this.nodeValue.indexOf(contentText) != -1; 
 
    }); 
 
    }; 
 
    var config = {} 
 
    config.text_config = [ 
 
    { 
 
     src: "Lorem ipsum", 
 
     target: "live long and prosper" 
 
    } 
 
    ]; 
 
    config.text_config.forEach(function (obj) { 
 
    var re = new RegExp(obj.src, 'g'); 
 
    $('*').getTextNodes(obj.src).each(function(item, element) { 
 
     this.nodeValue = this.nodeValue.replace(re, 'REPLACEMENT_TEXT'); 
 
    }); 
 
    }); 
 
});
<script src="//code.jquery.com/jquery-1.11.3.js"></script> 
 

 

 
<div id="Message area"> 
 
    <div class="selected-div"> 
 
     Operation Lorem ipsum Lorem ipsum 1 
 
    </div> 
 
    <div class="selected-div"> 
 
     Operation Lorem ipsum Lorem ipsum 2 
 
    </div> 
 
    <div class="selected-div"> 
 
     Operation Lorem ipsum Lorem ipsum 3 
 
    </div> 
 
    <div class="selected-div"> 
 
     Operation Lorem ipsum Lorem ipsum4 
 
    </div> 
 
</div>

+0

ну, мне нужно искать всю DOM. – Fawzan

+0

@Fawzan Я обновил свой ответ, чтобы позволить вам обрабатывать все элементы в dom, а также элемент, который не обрабатывается из jQuery. – gaetanoM

+0

Спасибо за внимание, но код не учитывает случай, когда «Lorem ipsum» встречается дважды в div. например «Операция Lorem ipsum Lorem ipsum 1' – Fawzan