$('.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));
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 = '.name';
const text = 'some name 1';
document.querySelectorAll(`${containerSelector} ${textSelector}`).forEach(n => {
if (n.innerText.indexOf(text) !== -1) {
n.closest(containerSelector).style.visibility = 'hidden';
}
});
.hidden {
visibility: hidden;
}
for (const n of document.querySelectorAll(containerSelector)) {
n.classList.toggle('hidden', n.querySelector(textSelector).textContent.includes(text));
}
.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 = 0;
const intervalID = setInterval(() => {
flip($items.eq(i));
if (++i >= $items.length) {
clearInterval(intervalID);
}
}, 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);
});