Используйте предопределенный массив строковых значений для querySelectorAll, чтобы выполнить определенное действие

Если у меня есть предопределенный массив строковых значений, как я могу узнать, существует ли какое-либо из них в DOM, с помощью querySelectorAll и textContent?


//my array of predefined string values
let primaries = ["house", "people", "cat", "dog"];

let mTable = document.querySelectorAll("#mytable td font");

вот здесь я и застрял... Я хочу найти любую строку от primaries до mTable. И если какое-либо строковое значение найдено, выполнить определенное действие (т. е. console.info("I found you"));

Это то, что у меня есть до сих пор, но оно работает только для одного элемента за раз. Как я могу расширить свой мыслительный процесс?

var mPrimary = Array.from(
  mtable.querySelectorAll("td font")
).find((el) => el.textContent === "house");
if (mPrimary) {
  mPrimary.closest("tr").classList.add("d-none");
}
.find() вернет только первое совпадение. Разве тебе не нужны все спички?
Barmar 03.09.2024 21:26

Спасибо за этот совет! Да, я хочу расширить свое мышление и попытаться найти «любое» совпадение из массива строк.

klewis 03.09.2024 21:27
Поведение ключевого слова "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) для оценки ваших знаний,...
3
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Используйте метод Array.includes() для поиска текста в массиве.

И используйте .filter() вместо .find(), чтобы получить все совпадающие td. Затем вы можете использовать .forEach(), чтобы обработать их все.

var mPrimary = Array.from(mtable.querySelectorAll("td font")
).filter(
  (el) => primaries.includes(el.textContent.trim())
);
mprimary.forEach(el => el.closest("tr").classList.add("d-none"));

Я добавил .trim(), чтобы окружающие пробелы не привели к сбою сопоставления.

Почему не цепь? Кроме того, на мой взгляд, Array.from более описателен, чем распространение.

mplungjan 03.09.2024 21:32

Было бы здорово, если бы все объекты, подобные массиву, наследовали все методы обхода массива. Что касается цепочки, я решил сохранить структуру исходного кода. Присвоение имен непосредственным значениям может облегчить понимание кода.

Barmar 03.09.2024 21:44

зачем повторять дважды? mprimary.forEach(el => !primaries.includes(el.textContent.trim() && el.closest("tr").classList.add("d-none")) и избегайте filter

Hagai Harari 03.09.2024 21:47

Это еще один способ сделать это. Опубликуйте это как ответ. @ХагайХарари

Barmar 03.09.2024 21:49

@HagaiHarari и даже document.querySelectorAll("#mytable td font").forEach(el => !primaries.includes(el.textContent.trim() && el.closest("tr").classList.add("d-none")), поскольку forEach IS поддерживается коллекцией, возвращаемой querySelectorAll

mplungjan 04.09.2024 11:21

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