почему значение переменной [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>
Когда вы назначили поля для 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);
}
counter
был по ссылке, поэтому, когда он увеличивает его, затем делает другой console.log
он ожидал, что оригинальный объект изменится.
Как только вы установите
var allFields = document.getElementsByClassName('test')[counter]
объект создается. Вы не можете динамически изменять объект, просто изменяя counter
. Если вы хотите это сделать, просто сохраните
var allFields = document.getElementsByClassName('test')
и используйте [counter]
когда вам нужно.
counter
равен 0. Он не увеличивается до следующего.