jsErrBlocks[key].remove(); выведите в консоль каждый jsErrBlocks[key] — увидите, там не только цифровые индексы с найденными элементами. for .. in пробежится по всем перечисляемым свойствам, включая унаследованные. Там будут и item, key, values, entries, forEach, lengthjsErrBlocks.forEach((item) => item.remove())for .. of, как уже посоветовали[...jsErrBlocks] – в него попадут только найденные элементыfor (let i = 0; i < jsErrBlocks.length; i++) getElementsByClassName() возвращает «живую» коллекцию. Как только в DOM что-то меняется, коллекция обновляется.array[i].className = 'style'; заменяет все классы элемента на этот. Т.е. пропадает класс "card", по которому отбирали элементы. Обработанный элемент пропадает из коллекции. Коллекция сокращается, и следующее значение i подхватит элемент через-один от задуманного.let array = [...document.getElementsByClassName('card')]; // теперь это просто массивcard, то добавлять класс можно через classList.add(), как уже посоветовали. загрузка страницы
текущий цвет = есть что в LS ? что-то из LS : цвет-по-умолчанию
нажали на кнопку
поменяли цвет
сохранили в LSзагрузка страницы
переменная_Состояние = значение-по-умолчанию (true или false)
есть что в LS ? переменная_Состояние значение из LS
сделать цвет по Состоянию
нажатие кнопки
обновить переменную_Состояния
сохранить в LS
сделать цвет по Состоянию(function () {
const storageKey = 'theme';
const state = {}
const stored = localStorage.getItem(storageKey);
state.theme = stored ? JSON.parse(stored) : false; // default
const el = document.querySelector('#pink');
const render = () => el.classList[state.theme ? 'add' : 'remove']('blueTheme');
render();
const toggleTheme = () => {
state.theme = ! state.theme;
localStorage.setItem(storageKey, JSON.stringify(state.theme));
render();
}
el.addEventListener('click', toggleTheme);
}())super.method()function, пусть и после .bind()$(document).ready(function() { ... });jQuery внутрь функции в виде аргумента $. position: fixed;, положение его менять программно по событию "scroll".document.addEventListener('scroll', () => {
let offset = window.scrollY;
const start = 685; // начало стоп-зоны в px
const stop = 1000; // конеч стоп-зоны
if (offset >= start && offset < stop) {
offset = start; // стоим на месте
} else if (offset >= stop) {
offset -= (stop - start); // продолжаем движение
}
content.style.top = `-${offset}px`; // позиционируем контент
});function checkResult() {
const data = {
hash: hash,
}
$.ajax({
url: 'result.php',
dataType: "json",
data: data,
success: (result) => {
const ok = result.ok;
if (ok != 1) {
// перезвоните через секунду
setTimeout(checkResult, 1000);
}
},
error: (response) => { // Данные не отправлены
$('#result_form').html('Ошибка. Данные не отправлены.');
}
});
}
checkResult(); event.stopPropagation();document.body.addEventListener('click', () => {
if (newdiw.classList.contains("active")) newdiw.classList.remove("active");
});