Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Перебор элементов на странице не работает (https://javascript.ru/forum/events/50706-perebor-ehlementov-na-stranice-ne-rabotaet.html)

webDive 08.10.2014 15:02

Перебор элементов на странице не работает
 
Только начинаю осваивать js, и вот написал небольшой консольный скрип для выборочный очистки страницы вконтакте от постов. Скрипт ниже должен чистить текущую страницу от всех постов которые оставил пользователь durov.

for (var i=1;i<530;i++){
if (document.getElementsByClassName('author')[i].getAttribute('href') == '/durov')
{
document.getElementsByClassName('post_delete_butto n fl_r')[i].onclick();}
}

Но вылезает ошибка: TypeError: document.getElementsByClassName(...)[i] is undefined

Насколько я понял проблема в переменной i, она почему-то не определена.
Элементы с классом author на странице есть и удачно выводятся в консоль. Когда добавляю цикл и выбираю [i] элемент массива все ломается.
Сколько ни пытался найти проблему, не смог. Прошу помощи

WorM32 08.10.2014 15:04

вместо 530 должно быть document.getElementsByClassName('author').length

webDive 08.10.2014 15:26

Не помогло. Не думаю, что дело тут в количестве элементов

Viral 08.10.2014 15:33

webDive,
WorM32 дело говорит.
проверь код, должно быть так:
for (var i=1;i<document.getElementsByClassName('author').length;i++){
  if (document.getElementsByClassName('author')[i].getAttribute('href') == '/durov'){
    document.getElementsByClassName('post_delete_butto n fl_r')[i].onclick();
  }
}

Sweet 08.10.2014 15:38

Во-первых, почему 530? Если планируешь стать программистом, запомни - то, где сегодня 530, завтра может быть 540 или 17. Во-вторых, каждый раз запрашивать .getElementsByClassName - это как бы накладненько. Вот... Проблема не в переменной i, а, скорее всего, в том, что удаляя посты их становится меньше и document.getElementsByClassName('author')[529] вернут undefined. А когда запрашиваешь метод у undefined, получаешь ошибку.

Arramis 08.10.2014 16:28

так должно быть без ошибок
var els = document.getElementsByClassName('author');
var btns = document.getElementsByClassName('post_delete_butto n fl_r');

for (var i = els.length - 1; i >= 0; i--) {
	if (els[i].getAttribute('href') == '/durov') {
		btns[i].onclick();
	}
}

webDive 11.10.2014 05:12

Цитата:

Сообщение от Sweet (Сообщение 334068)
Во-первых, почему 530? Если планируешь стать программистом, запомни - то, где сегодня 530, завтра может быть 540 или 17. Во-вторых, каждый раз запрашивать .getElementsByClassName - это как бы накладненько. Вот... Проблема не в переменной i, а, скорее всего, в том, что удаляя посты их становится меньше и document.getElementsByClassName('author')[529] вернут undefined. А когда запрашиваешь метод у undefined, получаешь ошибку.

Cпасибо, учту.
Но разве до того как выдать undefined скрипт не должен был удалить те элементы страницы по которым он прошелся?


Часовой пояс GMT +3, время: 20:02.