Как применить функцию выделения определенного слова Javascript к классу или идентификатору

#javascript #html

Вопрос:

Как применить функцию выделения определенного слова Javascript к классу или идентификатору

 function highlight(elem, keywords, caseSensitive = false, cls = 'highlight') {  const flags = caseSensitive ? 'gi' : 'g';  keywords.sort((a, b) =gt; b.length - a.length);  Array.from(elem.childNodes).forEach(child =gt; {  const keywordRegex = RegExp(keywords.join('|'), flags);  if (child.nodeType !== 3) {  highlight(child, keywords, caseSensitive, cls);  } else if (keywordRegex.test(child.textContent)) {  const frag = document.createDocumentFragment();  let lastIdx = 0;  child.textContent.replace(keywordRegex, (match, idx) =gt; {  const part = document.createTextNode(child.textContent.slice(lastIdx, idx));  const highlighted = document.createElement('span');  highlighted.textContent = match;  highlighted.classList.add(cls);  frag.appendChild(part);  frag.appendChild(highlighted);  lastIdx = idx   match.length;  });  const end = document.createTextNode(child.textContent.slice(lastIdx));  frag.appendChild(end);  child.parentNode.replaceChild(frag, child);  }  });  }   highlight(document.body, ['lorem', 'amet', 'autem']); 
 .highlight {  background: lightpink;  } 
 lt;div class="mytext"gt;lt;pgt;Hello world lorem ipsum dolor sit amet, consectetur adipisicing  elit. Est vel accusantium  totam, ipsum delectus et dignissimos mollitia!lt;/pgt; lt;pgt; Lorem ipsum dolor sit amet, consectetur adipisicing elit. Numquam, corporis. lt;smallgt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium autem voluptas  perferendis dolores ducimus velit error voluptatem, qui rerum modi? this is amet in the  walllt;/smallgt; lt;/pgt;  lt;div contenteditable="true"gt;hello amet thislt;/divgt;  lt;/divgt; 

теперь эта функция применима ко всему на сайте, нужно обратиться к class .mytext

Я новичок в javascript, поэтому демонстрационный пример был бы полезен.

Спасибо

Ответ №1:

сначала найдите нужный элемент, а затем используйте функцию выделения.

пример здесь:

 function highlight(elem, keywords, caseSensitive = false, cls = 'highlight') {  const flags = caseSensitive ? 'gi' : 'g';  keywords.sort((a, b) =gt; b.length - a.length);  Array.from(elem.childNodes).forEach(child =gt; {  const keywordRegex = RegExp(keywords.join('|'), flags);  if (child.nodeType !== 3) {  highlight(child, keywords, caseSensitive, cls);  } else if (keywordRegex.test(child.textContent)) {  const frag = document.createDocumentFragment();  let lastIdx = 0;  child.textContent.replace(keywordRegex, (match, idx) =gt; {  const part = document.createTextNode(child.textContent.slice(lastIdx, idx));  const highlighted = document.createElement('span');  highlighted.textContent = match;  highlighted.classList.add(cls);  frag.appendChild(part);  frag.appendChild(highlighted);  lastIdx = idx   match.length;  });  const end = document.createTextNode(child.textContent.slice(lastIdx));  frag.appendChild(end);  child.parentNode.replaceChild(frag, child);  }  });  } var byClass = document.getElementsByClassName('mytext')[0];   highlight(byClass, ['lorem', 'amet', 'autem']); 
 .highlight {  background: lightpink;  } 
 lt;div class="mytext"gt;lt;pgt;Hello world lorem ipsum dolor sit amet, consectetur adipisicing  elit. Est vel accusantium  totam, ipsum delectus et dignissimos mollitia!lt;/pgt; lt;pgt; Lorem ipsum dolor sit amet, consectetur adipisicing elit. Numquam, corporis. lt;smallgt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium autem voluptas  perferendis dolores ducimus velit error voluptatem, qui rerum modi? this is amet in the  walllt;/smallgt; lt;/pgt;  lt;div contenteditable="true"gt;hello amet thislt;/divgt;  lt;/divgt; 

Комментарии:

1. вопрос в том, как это сделать? мне нужно применить этот код только для class=»mytext», а не для всего сайта

2. отредактировал свой комментарий с примером. вам просто нужно найти нужный элемент

3. Большое Вам спасибо, отлично работает

4. @IvanDern не могли бы вы, пожалуйста, отметить это как ответ? это будет высоко оценено

Ответ №2:

Вы применяете свою highlight функцию к document.body . Вместо этого вы должны применить его к элементу с идентификатором:

 highlight(document.getElementById('your_id'), ['lorem', 'amet', 'autem']);  

Или ко всем элементам с некоторым классом:

 document.querySelectorAll('.your_class').forEach(function(element) {  highlight(element, ['lorem', 'amet', 'autem']); });  

Комментарии:

1. спасибо, что выделили(document.getElementById работает на решетке, но эта функция не является документом. querySelectorAll(‘.your_class’).forEach(функция(элемент) { выделить(элемент, [‘lorem’, ‘amet’, ‘autem’]); });

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

3. моя ошибка, работает правильно в обоих вариантах, большое Вам спасибо