Как исправить ошибку, цикл по замене слов на другие?

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

for (let keyMap2 of map2.keys()) {
      for(let keyMap of map.keys()){
         if(keyMap == keyMap2){
         elm.nodeValue=map2.get(keyMap2);
         
        } 
      }
    }

Помогите исправить код Вот сам код и результат его работы.

let map = new Map([["73-b3"," Главная"],
["04-d2","Публикации"],
["d0-51", " Новости"],
["c5-3c", " Контакты"],
["7d-ae", "Удостоверяющий центр"]]);
let map2= new Map([["73-b3"," Main"],
["04-d2","Publications"],
["d0-51", " News"],
["c5-3c", " Contacts"],
["7d-ae", "Certification center"],
["8f-01", "Verification Center"]]);


reserveTranslateText(document)

function reserveTranslateText(elm) {
    if (elm.nodeType == Node.ELEMENT_NODE || elm.nodeType == Node.DOCUMENT_NODE) {
        // exclude elements with invisible text nodes
        if (isExcluded(elm)) {
            return
        }
        for (var i = 0; i < elm.childNodes.length; i++) {
            // recursively call to traverse
            reserveTranslateText(elm.childNodes[i]);
        }
    }
    if (elm.nodeType == Node.TEXT_NODE) {
        // exclude text node consisting of only spaces
        if (elm.nodeValue.trim() == "") {
            return
        }
        
for (let keyMap2 of map2.keys()) {
          for(let keyMap of map.keys()){
             if(keyMap == keyMap2){
             elm.nodeValue=map2.get(keyMap2);
             
            } 
          }
        }
    }          
}


/*******************************************************************************/


function isExcluded(elm) {
    if (elm.tagName == "STYLE") {
        return true;
    }
    if (elm.tagName == "SCRIPT") {
        return true;
    }
    if (elm.tagName == "NOSCRIPT") {
        return true;
    }
    if (elm.tagName == "IFRAME") {
        return true;
    }
    if (elm.tagName == "OBJECT") {
        return true;
    }
    if (elm.tagName == "TITLE"){
        return true;
    }
    return false
}
<div id="navigation">
<ul>
  <li class="selected"><a href="index.shtml">Главная</a></li>
  <li><a href="public.shtml">Публикации</a></li>
  <li><a href="news.shtml">Новости</a></li>
  <li><a href="contacts.shtml">Контакты</a></li>
  <li><a href="/cert/">Удостоверяющий центр</a></li>
</ul>
</div>

а должно быть так

Main
Publications
News
Contacts
Certification center

Ответы (1 шт):

Автор решения: Igor

Двойной цикл делает для всех элементов одно и то же. Естественно, результат для всех элементов - один и тот же.

let map = new Map([
  ["73-b3", " Главная"],
  ["04-d2", "Публикации"],
  ["d0-51", " Новости"],
  ["c5-3c", " Контакты"],
  ["7d-ae", "Удостоверяющий центр"]
]);
let map2 = new Map([
  ["73-b3", " Main"],
  ["04-d2", "Publications"],
  ["d0-51", " News"],
  ["c5-3c", " Contacts"],
  ["7d-ae", "Certification center"],
  ["8f-01", "Verification Center"]
]);

reserveTranslateText(document)

function reserveTranslateText(elm) {
  if (elm.nodeType == Node.ELEMENT_NODE || elm.nodeType == Node.DOCUMENT_NODE) {
    // exclude elements with invisible text nodes
    if (isExcluded(elm)) {
      return;
    }
    for (var i = 0; i < elm.childNodes.length; i++) {
      // recursively call to traverse
      reserveTranslateText(elm.childNodes[i]);
    }
  }
  if (elm.nodeType == Node.TEXT_NODE) {
    // exclude text node consisting of only spaces
    if (elm.nodeValue.trim() == "") {
      return;
    }

    for (let keyMap of map.keys()) {
      if (map2.has(keyMap) && elm.nodeValue.trim() == map.get(keyMap).trim()) {
        elm.nodeValue = map2.get(keyMap);
        return;
      }
    }
  }
}


/*******************************************************************************/


function isExcluded(elm) {
  if (elm.tagName == "STYLE") {
    return true;
  }
  if (elm.tagName == "SCRIPT") {
    return true;
  }
  if (elm.tagName == "NOSCRIPT") {
    return true;
  }
  if (elm.tagName == "IFRAME") {
    return true;
  }
  if (elm.tagName == "OBJECT") {
    return true;
  }
  if (elm.tagName == "TITLE") {
    return true;
  }
  return false
}
<div id="navigation">
  <ul>
    <li class="selected"><a href="index.shtml">Главная</a></li>
    <li><a href="public.shtml">Публикации</a></li>
    <li><a href="news.shtml">Новости</a></li>
    <li><a href="contacts.shtml">Контакты</a></li>
    <li><a href="/cert/">Удостоверяющий центр</a></li>
  </ul>
</div>

→ Ссылка