Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Замена слова посредством JS (https://javascript.ru/forum/misc/57272-zamena-slova-posredstvom-js.html)

phonex 27.07.2015 22:10

Замена слова посредством JS
 
Привет форумчане, нашел поиском данный скрипт:
<script>
    window.onload=function(){
    all_elements=document.getElementsByTagName('*');
    for(i=0,s=all_elements.length;i<s;i++)
        if(all_elements[i].tagName!="SCRIPT")
            for(j=0,s_=all_elements[i].childNodes.length;j<s_;j++)
                if(all_elements[i].childNodes[j].nodeType==3)
                    all_elements[i].childNodes[j].textContent=all_elements[i].childNodes[j].textContent.replace(/Вася/g, '*****');
    }
    </script>

Работа вполне устраивает, но, мне нужно не одно слово заменить, а несколько:
Допустим есть массив слов: (Вася, Юра, Маша, Саша)
Как можно заменить все эти данные слова на ****

EmperioAf 27.07.2015 22:53

читайте здесь
http://javascript.ru/basic/regular-e...nom-vyrazhenii
по идее надо просто заменить (/Вася/g, '*****')
на
(/(Вася|Юра|Маша|Саша)/g, '*****')

рони 27.07.2015 23:04

phonex,
http://javascript.ru/RegExp

рони 27.07.2015 23:06

EmperioAf,
а как чтоб массив то можно было вставить с именами ?

рони 28.07.2015 00:07

поиск текстовых узлов и замена текста
 
;)

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script>
  window.onload =
      function() {
          var treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false),
              users = ["Вася", "Юра", "Маша", "Саша"],
              reg = new RegExp(users.join("|"), "ig");
          while (treeWalker.nextNode()) {
              var el = treeWalker.currentNode;
              el.data = el.data.replace(reg, "*****")
          }
      };
  </script>
</head>

<body>
Допустим есть массив слов: (ВАСЯ, ЮРА, МАША, САША)
<div>
    <a>Маша</a>
</div>
<ul>
    <li>Саша</li>
</ul>
<div>
    <a>Маша</a>
</div>
<ul>
    <li>Саша</li>
</ul>
</body>

</html>

Urfin 28.07.2015 03:08

Цитата:

Сообщение от рони
treeWalker

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

рони, скажите плиз, что это за объект? Чем полезен? Где лучше почитать про него?

рони 28.07.2015 05:52

Urfin,
да документация на английском
https://developer.mozilla.org/en-US/...eateTreeWalker
http://www.w3.org/TR/DOM-Level-2-Tra...eateTreeWalker
по русски наверно достаточно описания тут
http://javascript.ru/forum/events/29...tml#post187693

Sav2907 18.03.2016 15:16

Цитата:

Сообщение от рони (Сообщение 381794)
;)

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script>
  window.onload =
      function() {
          var treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false),
              users = ["Вася", "Юра", "Маша", "Саша"],
              reg = new RegExp(users.join("|"), "ig");
          while (treeWalker.nextNode()) {
              var el = treeWalker.currentNode;
              el.data = el.data.replace(reg, "*****")
          }
      };
  </script>
</head>

<body>
Допустим есть массив слов: (ВАСЯ, ЮРА, МАША, САША)
<div>
    <a>Маша</a>
</div>
<ul>
    <li>Саша</li>
</ul>
<div>
    <a>Маша</a>
</div>
<ul>
    <li>Саша</li>
</ul>
</body>

</html>

Спасибо

рони 18.03.2016 15:20

замена слов по списку
 
Sav2907,
:-/ в обьекте строка17 ключи в нижнем регистре !!! в строке 12 регистр любой
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script>
  window.onload =
      function() {
          var treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false),
              users = ["Вася", "Юра", "Маша", "Саша"],
              reg = new RegExp(users.join("|"), "ig");
          while (treeWalker.nextNode()) {
              var el = treeWalker.currentNode;
              el.data = el.data.replace(reg, function(a) {
    return {"маша" : "Мария", "саша":"Александра"}[a.toLowerCase()] || a
})
          }
      };
  </script>
</head>

<body>
Допустим есть массив слов: (ВАСЯ, ЮРА, МАША, САША)
<div>
    <a>Маша</a>
</div>
<ul>
    <li>Саша</li>
</ul>
<div>
    <a>Маша</a>
</div>
<ul>
    <li>Саша</li>
</ul>
</body>

</html>

Sav2907 18.03.2016 15:34

Спасибо большое


Часовой пояс GMT +3, время: 08:07.