Без jQuery, как я мог бы выборочно удалять элементы, которые существуют в массиве?

#javascript #jquery #html #arrays

#javascript #jquery #HTML #массивы

Вопрос:

Я только начинаю работать с Javascript около недели, после создания нескольких скриптов Tampermonkey.

На странице, над которой я работаю, есть динамические элементы, которые в основном появляются случайным образом при каждой загрузке страницы. Например, иногда на странице будет загружен только элемент «здесь», а при другой загрузке страницы я могу видеть только «что» и «выполнение», загруженные вместо этого. При каждой загрузке страницы я надеюсь, что мой скрипт будет сканировать все эти элементы и удалять все загруженные.

К счастью, их пути выбора легко найти, но я ищу более привлекательный / простой способ заставить мой скрипт найти любой из этих 5 элементов. Вот макет, который работает:

 var what = document.querySelector('#wrapper > footer > div > div > div:nth-child(3) > span')
var am = document.querySelector('#wrapper > footer > div > div > div:nth-child(2) > span')
var i = document.querySelector('#wrapper > footer > div > div > div:nth-child(36) > span')
var doing = document.querySelector('#wrapper > footer > div > div > div:nth-child(4) > span')
var here = document.querySelector('#wrapper > footer > div > div > div:nth-child(5) > span')

if (what) {
    what.remove();
}
if (am) {
    am.remove();
}
if (i) {
    i.remove();
}
if (doing) {
    doing.remove();
}
if (here) {
    here.remove();
}
 

Наличие ТОННЫ операторов IF, конечно, будет работать, и у меня есть сильное ощущение, что добавление всех моих переменных в массив было бы самым чистым методом, но, изучив до сих пор массивы и операторы array, я еще не совсем знаю, что было бы моим лучшим вариантом.

В идеале я пытаюсь стремиться к чему-то вроде:

 var group = [what, am, i, doing, here]
if (group.includes == true)
true.remove();
 

.. или что-то в этом роде. Есть ли гораздо лучший способ сделать это, чем мой текущий метод с использованием потока операторов IF?

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

1. Вы на правильном пути, создайте форму массива, как вы делали для group , а затем выполните цикл по ней, используя forEach и удаляя элемент в соответствии с вашими условиями

2. Спасибо за предупреждение! Я forEach несколько раз просматривал, но не был уверен, как именно я могу включить это в сценарий. Здесь были даны некоторые ответы, которые показали, как использовать этот параметр, и теперь все это имеет большой смысл. Возможно, мне просто придется вернуться и попробовать несколько других параметров и поиграть с результатами через консоль, теперь, когда у меня есть идея получше. Еще раз спасибо!

Ответ №1:

Почти готово — просто выполните цикл group с forEach и remove каждым элементом, если он существует:

 var what = document.querySelector('#wrapper > footer > div > div > div:nth-child(3) > span')
var am = document.querySelector('#wrapper > footer > div > div > div:nth-child(2) > span')
var i = document.querySelector('#wrapper > footer > div > div > div:nth-child(36) > span')
var doing = document.querySelector('#wrapper > footer > div > div > div:nth-child(4) > span')
var here = document.querySelector('#wrapper > footer > div > div > div:nth-child(5) > span')

var group = [what, am, i, doing, here];

group.forEach(item => {
    if (item) item.remove();
});
 

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

1. Ага, вот оно! Аааа, большое спасибо за то, что заполнили там недостающую часть. forEach продолжал выскакивать после копания в параметрах массива, но я не был уверен, как я смогу полностью использовать его. Я думаю, что в какой-то момент я зашел так далеко, что каким-то образом попытался использовать splice() сортировку всех загруженных элементов в совершенно новый массив, а затем найти способ удалить только те элементы в этом новом массиве, ха-ха. Я чуть не потерял свое безумие после того, как занимался этим до 4 утра. Спасибо за супер быстрый и полезный ответ!