Увеличивающийся счетчик не меняет значение другой переменной

1

почему значение переменной [counter], используемое в другой переменной, не изменяется при изменении значения счетчика? Это как-то связано со ссылкой?

var counter = 0;

var allFields = document.getElementsByClassName('test')[counter].getElementsByClassName("pizza");

console.log(allFields);

counter++;

console.log(allFields); // expected result is to have 2 pizza elements.
<div class="test">
	<div class="pizza"></div>
</div>
<div class="test">
	<div class="pizza"></div>
	<div class="pizza"></div>
</div>
<div class="test">
	<div class="pizza"></div>
	<div class="pizza"></div>
  <div class="pizza"></div>
</div>
<div class="test">
	<div class="pizza"></div>
	<div class="pizza"></div>
  <div class="pizza"></div>
  <div class="pizza"></div>
</div>
  • 0
    Когда вы запускаете этот код, counter равен 0. Он не увеличивается до следующего.
  • 0
    Да, вы должны пройтись по длине выбранных элементов
Показать ещё 3 комментария
Теги:

2 ответа

2
Лучший ответ

Когда вы назначили поля для allFields с помощью counter = 0 - они больше не будут меняться - вам нужно снова назначить эту переменную.

Я бы предложил вам создать его как функцию:

var allFields = function(i) {
  return document.getElementsByClassName('test')[counter].getElementsByClassName("pizza");
}

var counter = 0;
console.log(allFields(counter));

counter++;
console.log(allFields(counter));

Другой, лучший способ - создать цикл, например:

for (var i = 0, i < 2; i++) {
  var allFields = document.getElementsByClassName('test')[i].getElementsByClassName("pizza");

  console.log(allFields);
}
  • 0
    Не говоря уже о том, что петли нет
  • 1
    Его недоразумение состоит в том, что он думал, что counter был по ссылке, поэтому, когда он увеличивает его, затем делает другой console.log он ожидал, что оригинальный объект изменится.
Показать ещё 2 комментария
1

Как только вы установите

var allFields = document.getElementsByClassName('test')[counter]

объект создается. Вы не можете динамически изменять объект, просто изменяя counter. Если вы хотите это сделать, просто сохраните

var allFields = document.getElementsByClassName('test')

и используйте [counter] когда вам нужно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню