#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 утра. Спасибо за супер быстрый и полезный ответ!