class="red"
document.querySelectorAll('div.red').forEach((el) => {
el.childNodes.forEach((node) => {
if (node.nodeType === Node.TEXT_NODE) {
const wrap = document.createElement('span');
wrap.classList.add('violet');
el.replaceChild(wrap, node);
wrap.appendChild(node);
}
})
})
document
событие "click" или "mousedown".div.mobile-panel
через однократный вызов Node.contains() (он смотрит сразу на любую глубину). Если внутри – не прятать, если снаружи – закрывать меню.const menuRoot = document.querySelector('div.mobile-panel');
document.addEventListener('mousedown', (e) => {
if (! menuRoot.contains(e.target)) {
document.body.classList.remove('-show')
}
})
const quiz = {
question: 'Выберите один вариант',
choices: [
{
answer: 'мотоцикл',
child: {
question: 'Выберите модель мотоцикла',
choices: [
{ answer: 'Гоночный', child: { ... } },
{ answer: 'Чоппер', child: { ... } }
]
}
},
{
answer: 'Машина',
child: {
question: 'Выберите модель машины',
choices: [
{ answer: 'Ока', child: { ... } },
{ answer: 'Bentley', child: { ... } }
]
}
}
]
},
data-flat
записан номер квартиры. data-flat
совпадает с этим номером. Для этого используется селектор [data-flat="42"]
let
на каждой итерации создаётся окружение. for(var i = 0; i < 3; i++) {
let j = i; // доступна только на этой итерации в этом блоке
setTimeout(() => console.log(j), 0);
}
/*
0
1
2
*/
<canvas width="450" height="450"></canvas>