Использование ванильного javascript для скрытия тега, содержащего определенный текст

У меня есть этот код, который скрывает div, который содержит только определенное слово, я пытался (безуспешно) скрыть любой div, который содержит это слово, но также содержит больше текста.

Любая помощь будет оценена, спасибо!

let divs = document.getElementsByClassName('test');

for (let x = 0; x < divs.length; x++) {
    let div = divs[x];
    let content = div.innerHTML.trim();
  
    if (content == 'example') {
       div.style.display = 'none';
    }
}
<div class = "test">
    ipsum
</div>
<div class = "test">
    example
</div>
<div class = "test">
    example complete
</div>

Ваш пример работает, в чем проблема?

Alexandre Elshobokshy 22.01.2019 15:16

Может быть, вы поместили свой код js перед рендерингом dom? попробуйте window.onload для вызова функций.

johnson lai 22.01.2019 15:18

@IslamElshobokshy работает для точных совпадений (как видно из примера кода — example скрыт), но не для любого контента, включающего термин (также видно во фрагменте — example complete не скрыт).

VLAZ 22.01.2019 15:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
642
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете использовать JavaScript string.includes().

Хакерский способ удалить только div, содержащий более чем только "пример", состоит в том, чтобы иметь "example " в includes(). Это удалит div только в том случае, если у innerHTML есть пробел после «примера».

let divs = document.getElementsByClassName('test');

for (let x = 0; x < divs.length; x++) {
    let div = divs[x];
    let content = div.innerHTML.trim();
  
    if (content.includes('example')) {
        div.style.display = 'none';
    }
}
<div class = "test">
    ipsum
</div>
<div class = "test">
    example
</div>
<div class = "test">
    example complete
</div>

Я думаю, это именно то, что нужно оператору.

d-h-e 22.01.2019 15:18
contains this word, but also contains more text.
tresf 22.01.2019 15:18

точно tresf, мне нужно также скрыть div, который содержит текст: «пример завершен». С моим текущим кодом я могу только скрыть div, содержащий текст: «пример».

user2965583 22.01.2019 15:23

@MartijnVissers Я бы просто сделал: if (divs[x].innerHTML.includes('example'), но в любом случае: D

Elias 22.01.2019 15:25

@Elias Есть много способов сократить этот код, но не знаю, есть ли у OP еще код, который не нужен для вопроса или чего-то еще, поэтому небольшое изменение может быть лучшим. Но спасибо за предложение :)

Martijn Vissers 22.01.2019 15:26

@MartijnVissers Конечно... Мне больше нравится твой ответ :)

Elias 22.01.2019 15:27

@MartijnVissers Это будет мой перейти к.

Elias 22.01.2019 15:37

Когда вы выполняете div.innerHTML.trim(), он занимает весь элемент div.

https://jsfiddle.net/ucvteLq7/7/

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

Ответ принят как подходящий

Что-то современное…

document.querySelectorAll('.test').forEach((element, index) => {
   if (element.innerText.includes('example')) {
       element.style.display = 'none';
   }
})
<div class = "test">ipsum</div>
<div class = "test">example</div>
<div class = "test">example complete</div>

Документы:NodeList.prototype.forEach()String.prototype.includes()

ха! теперь это именно то, что я бы сделал, хорошо :) О ... ну, может быть, я бы использовал функцию стрелки: P

Elias 22.01.2019 15:28

Я что-то неправильно понял? @Энди

l2aelba 22.01.2019 15:33

@Энди Хммм.. почему он принял меня?. Я думаю, мы не уверены, что ему нужно :)

l2aelba 22.01.2019 15:47

@user2965583 user2965583 Это то, что тебе нужно? проверить результат

l2aelba 22.01.2019 15:48

@Энди, я думаю, ему нужно что-то вроде этого. Пожалуйста, проголосуйте за меня

l2aelba 22.01.2019 15:50

Если вы хотите удалить div, который содержит искомое слово (проверено с помощью includes), но в котором также есть другие символы, возможно, сохраните слово в переменной и проверьте, длиннее ли текст.

let divs = document.getElementsByClassName('test');
const word = 'example';

for (let x = 0; x < divs.length; x++) {
  let div = divs[x];
  let content = div.innerHTML.trim();
  if (content.includes(word) & content.length > word.length) {
    div.style.display = 'none';
  }
}
<div class = "test">
ipsum
</div>
<div class = "test">
example
</div>
<div class = "test">
example complete
</div>

Вот модернизированная версия этого кода.

let divs = document.querySelectorAll('.test');
const word = 'example';

divs.forEach(div => {
  const { style, textContent } = div;
  const trimmed = textContent.trim();
  if (trimmed.includes(word) && trimmed.length > word.length) {
    style.display = 'none';
  }
});
<div class = "test">
ipsum
</div>
<div class = "test">
example
</div>
<div class = "test">
example complete
</div>

Другие вопросы по теме