$('.wrap').on('input', function(e) {
const valid = $(this).find('.valid').get().map(el => {
if (el === e.target) {
$(el).toggleClass('empty', !el.value);
}
return el.value;
}).every(Boolean);
$('.btn')
.toggleClass('btn--isvalid', valid)
.toggleClass('btn--novalid', !valid);
});
$('.form-group').trigger('input').
const classes = [
{ maxLen: 15, name: 'length-15' },
{ maxLen: 30, name: 'length-30' },
{ maxLen: 45, name: 'length-45' },
];
document.querySelectorAll('.container').forEach(n => {
const len = n.textContent.length;
const cls = classes.find(m => m.maxLen >= len);
if (cls) {
n.classList.add(cls.name);
}
});
arr.sort((a, b) => (a.finishedDate || a.createdDate) - (b.finishedDate || b.createdDate));Добавляется еще один дополнительный параметр, такой как статус)
status: 'started' или status: 'finished'.
Как можно поставить элемент со статусом started в начало массива?
arr.sort((a, b) => {
const aStatus = a.status !== 'started';
const bStatus = b.status !== 'started';
const aDate = a.finishedDate || a.createdDate;
const bDate = b.finishedDate || b.createdDate;
return (aStatus - bStatus) || (aDate - bDate);
});Ругается на: aStatus - bStatus
The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
Но если присвоить тип этим переменным эни, то работает супер-пупер
any, превращайте значения в числа явным образом:const aStatus = +(a.status !== 'started');
const bStatus = +(b.status !== 'started');
document.querySelector('input').addEventListener('input', e => {
const
val = e.target.value,
reg = RegExp(val, 'gi'),
keys = [ 'firstName', 'lastName' ];
document.querySelector('.autocomplete-suggestions__list').innerHTML = val && people
.map(n => keys.map(k => n[k]).join(' '))
.filter(n => (reg.lastIndex = 0, reg.test(n)))
.map(n => `<div>${n.replace(reg, '<strong>$&</strong>')}</div>`)
.join('');
});
const containerSelector = '.field';
const textSelector = `${containerSelector} .name`;
const text = 'some name 1';for (const n of document.querySelectorAll(textSelector)) {
if (n.innerText === text) {
n.closest(containerSelector).style.visibility = 'hidden';
}
}.hidden {
visibility: hidden;
}document.querySelectorAll(containerSelector).forEach(function(n) {
n.classList.toggle('hidden', this(n.querySelector(textSelector).textContent));
}, RegExp.prototype.test.bind(RegExp(text, 'i')));
.html($(this).find('img')).html($(this).find('img').clone())
.items-left, а проверяете количество .items-right. Думали, что класс сам собой заменится? Нет, так не будет.
const getImg = url => fetch(url)
.then(r => r.blob())
.then(blob => new Promise(resolve => {
const reader = new FileReader();
reader.addEventListener('loadend', () => resolve({ image: reader.result }));
reader.readAsDataURL(blob);
}));
document.querySelector('button').addEventListener('click', async () => {
const arrImg = await Promise.all(arr.map(n => getImg(`./images/${n}`)));
console.log(arrImg);
});
const $items = $('.card');
const openedClass = 'card--opened';
const closedClass = 'card--closed';
const delay = 500;
const flip = $item => $item.removeClass(closedClass).addClass(openedClass);$items.each((i, n) => setTimeout(flip, (i + 1) * delay, $(n)));(function next(i) {
if (i < $items.length) {
setTimeout(() => {
flip($items.eq(i));
next(-~i);
}, delay);
}
})(0);let i = -1;
const intervalID = setInterval(() => {
if (++i >= $items.length) {
clearInterval(intervalID);
} else {
flip($items.eq(i));
}
}, delay);
const obj = array.reduce((acc, n, i) => (
acc[`filter${i + 1}`] = { ...baseFilter, prop: n },
acc
), {});const obj = {};
for (const [ i, n ] of array.entries()) {
(obj['filter' + (-~i)] = Object.assign({}, baseFilter)).prop = n;
}const obj = {};
for (let i = 0; i < array.length;) {
const subobj = { prop: array[i] };
for (const k in baseFilter) {
subobj[k] = baseFilter[k];
}
obj['filter'.concat(++i)] = subobj;
}
const itemsSelector = '.block';
const wrapperTag = 'div';
const wrapperClass = 'parent';const $items = $(itemsSelector);
$items.each(i => $items
.eq(i)
.nextUntil($items.get(i + 1))
.wrapAll(`<${wrapperTag} class="${wrapperClass}">`)
);document.querySelectorAll(itemsSelector).forEach((n, i, a) => {
const elems = [];
for (let el = n; (el = el.nextElementSibling) != a[-~i]; elems.push(el)) ;
n.after(document.createElement(wrapperTag));
n.nextSibling.classList.add(wrapperClass);
n.nextSibling.append(...elems);
});