checked
не приводит к возникновению события change
, так что его следует создавать самостоятельно - добавьте .trigger('change')
после вызова prop
. const getChunks = (arr, chunkSize) =>
Array.from(
{ length: Math.ceil(arr.length / chunkSize) },
(n, i) => arr.slice(i * chunkSize, (i + 1) * chunkSize)
);
// или
const getChunks = (arr, chunkSize) =>
arr.reduce((acc, n, i) => (
i = i / chunkSize | 0,
(acc[i] = acc[i] || []).push(n),
acc
), []);
// или
const getChunks = (arr, chunkSize) =>
arr.reduce((acc, n, i) => (
(i % chunkSize) || acc.push([]),
acc[acc.length - 1].push(n),
acc
), []);
const arr = [...Array(50).keys()];
const chunks = getChunks(arr, 7);
const links = document.querySelectorAll('a');
// или
const links = document.getElementsByTagName('a');
const getHref = el => el.getAttribute('href');
// или
const getHref = el => el.attributes.href.value;
const hrefs = Array.from(links, getHref);
// или
const hrefs = Array.prototype.map.call(links, getHref);
// или
const hrefs = [];
for (const n of links) {
hrefs.push(getHref(n));
}
// или
const hrefs = [];
for (let i = 0; i < links.length; i++) {
hrefs[i] = getHref(links[i]);
}
Ведь у пустого массива есть численное представление: +[] вернет 0.
false+[]
нет преобразования массива в число. Есть сложение - массив преобразовывается в строку, false тоже. Если интересуют детали - можете ознакомится со спецификацией. <div id="sound-btn-wrapper">
<div class="btn btn-start">On</div>
<div class="btn btn-stop">Off</div>
</div>
const audio = new Audio('...');
$('#sound-btn-wrapper').on('click', '.btn', function() {
audio.pause();
if ($(this).hasClass('btn-start')) {
audio.currentTime = 0;
audio.play();
}
});
function simpleSlider(element) {
const root = typeof element === 'string'
? document.querySelector(element)
: element;
const items = root.querySelectorAll('.slider__item');
const prev = root.querySelector('.slider__btn-prev');
const next = root.querySelector('.slider__btn-next');
let index = 0;
function slideTo(newIndex) {
items[index].classList.remove('slider__item--active');
index = (newIndex + items.length) % items.length;
items[index].classList.add('slider__item--active');
}
prev.addEventListener('click', () => slideTo(index - 1));
next.addEventListener('click', () => slideTo(index + 1));
}
simpleSlider('#slider1');
simpleSlider(document.querySelector('#slider2'));
const elements = [...document.getElementsByTagName('p')];
// или
const elements = Array.from(document.getElementsByTagName('p'));
// или
const elements = [].concat.apply([], document.getElementsByTagName('p'));
// или
const elements = Array.prototype.slice.call(document.getElementsByTagName('p'));
// или
const elements = Object.values(document.getElementsByTagName('p'));
const result = arr.filter((n, i, a) => n === a.find(m => m.lat === n.lat && m.lng === n.lng));
const result = Object.values(arr.reduce((acc, n) => (acc[`${n.lat},${n.lng}`] = n, acc), {}));
const result = [].concat(...Object
.values(arr.reduce((acc, n) => ((acc[n.lat] = acc[n.lat] || {})[n.lng] = n, acc), {}))
.map(Object.values)
);
const result = Array.from(new Set(arr.map(JSON.stringify)), JSON.parse);
const unique = (arr, keys) =>
arr.filter((n, i, a) => i === a.findIndex(m => keys.every(k => n[k] === m[k])));
const result = unique(arr, [ 'lat', 'lng' ]);
[...document.querySelector('ul').children]
.map(n => ({ el: n, text: n.querySelector('.link').innerText }))
.sort((a, b) => a.text.localeCompare(b.text))
.forEach(n => n.el.parentNode.append(n.el));
const arr = [6,4,4.5,3.5,5.5,3,6.5];
const middle = [...arr].sort((a, b) => a - b)[arr.length / 2 | 0];
const blockSelector = '.block';
const buttonSelector = '[data-class]';
const activeClass = 'active';
const blocks = document.querySelectorAll(blockSelector);
const buttons = [...document.querySelectorAll(buttonSelector)];
const classes = buttons.map(n => n.dataset.class);
document.body.addEventListener('click', e => {
const button = e.target.closest(buttonSelector);
if (button) {
blocks.forEach(n => {
n.classList.remove(...classes);
n.classList.add(button.dataset.class);
});
buttons.forEach(n => n.classList.toggle(activeClass, n === button));
}
});
$('ul').click(function(e) {
e.stopPropagation();
const $li = $(e.target).closest('li');
if ($li.length) {
$li.children('ul').toggle();
$li.siblings().children('ul').hide();
}
}).find('ul').hide();
$('.new-game') добавляется динамически на страницу
.new-game
в тот момент, когда вы его пытаетесь получить.Хотелось бы сделать универсальную функцию, чтобы можно было передавать в неё элемент...
body
анимируйте .wrapper
:$('.vertical').on('click', 'a', function(e) {
e.preventDefault();
const id = $(this).attr('href');
const $wrapper = $('.wrapper');
const offset = $(id).offset().top;
const scrollTop = offset + $wrapper.scrollTop();
$wrapper.animate({ scrollTop }, 1500);
});