Здесь собрана модель списка с глубиной 3. На первом уровне все работает как надо, при перетаскивании, элемент имеющий дочерние элементы перетаскивается вместе с ними. Но на 2-й глубине родитель и потомок уже не связаны
:visible
:$('.login-container a').click(function() {
$(`form.${this.dataset.targetclass}, form:visible`).animate({
height: 'toggle',
opacity: 'toggle',
}, 'slow');
});
$('<a href="#" class="list-group-item" />').append(year - i).appendTo('.list-group');
Так вот, почему появляется не 10 пунктов, а всего 5!
const [ tbody ] = table.tBodies;
tbody.append(...Array
.from(tbody.rows, n => [ n, +n.cells[0].textContent ])
.sort((a, b) => a[1] - b[1])
.map(n => n[0].cloneNode(true))
);
[...table.rows]
.sort((a, b) => a.innerText - b.innerText)
.forEach(n => table.insertRow().innerHTML = n.innerHTML);
const colors = [ 'green', 'blue', 'red' ];
$('table').on('click', 'td', function() {
$(this).addClass(colors[$(this).text() - 1]);
})
$('table').find('td').text(() => 1 + Math.random() * 3 | 0);
Как залить ячейку по которой я нажал и ячейки вокруг нее в цвет из масива?
не много не так. нужно залить все 1 цветом
<div class="inputs">
<input><input><input>
</div>
<input class="concatenated">
<button class="show-result">show result</button>
<div class="result"></div>
document.querySelector('.inputs').addEventListener('input', function() {
document.querySelector('.concatenated').value = Array
.from(this.querySelectorAll('input'), n => n.value)
.filter(Boolean)
.join(';');
});
document.querySelector('.show-result').addEventListener('click', function() {
document.querySelector('.result').innerHTML = document.querySelector('.concatenated')
.value
.split(';')
.map(n => `<div>${n}</div>`)
.join('');
});
$('.inputs').on('input', function() {
$('.concatenated').val($('input', this)
.get()
.map(n => $(n).val())
.filter(Boolean)
.join(';')
);
});
$('.show-result').on('click', function() {
$('.result').html($('.concatenated')
.val()
.split(';')
.map(n => `<div>${n}</div>`)
.join('')
);
});
file.name.split(/\.\D+/g)[0]
file.name.slice(0, file.name.lastIndexOf('.'))
мне нужен сам формат png
file.name.slice(file.name.lastIndexOf('.') + 1)
.file.name.split('.').pop()
.file.name.match(/[^.]+$/)[0]
.file.name.replace(/.*\./, '')
. <select class="b-fruits">
<option>apple</option>
<option>orange</option>
<option>banana</option>
</select>
<select class="b-discounts">
<option data-type="apple">100</option>
<option data-type="apple">200</option>
<option data-type="orange">300</option>
<option data-type="banana">400</option>
</select>
$('.b-fruits').change(function() {
$('.b-discounts')
.val(null)
.find('option')
.hide()
.filter(`[data-type="${$(this).val()}"]`)
.show();
}).change();
// или
const fruits = document.querySelector('.b-fruits');
const discounts = document.querySelector('.b-discounts');
fruits.addEventListener('change', ({ target: { value } }) => {
discounts.value = null;
for (const n of discounts.options) {
n.hidden = n.dataset.type !== value;
}
});
fruits.dispatchEvent(new Event('change'));
const obj = arr
.filter(n => n.status === 'approved')
.reduce((p, c) => ({ ...p, message: `${p.message}\n${c.message}` }));
const grouped = arr.reduce((acc, { status, message }) => {
acc[status] = acc[status] || { status, messages: [] };
acc[status].messages.push(message);
return acc;
}, {});
Object.keys(grouped).forEach(n => grouped[n].messages = grouped[n].messages.join('\n'));
const obj = grouped.approved;
[...document.querySelectorAll('.add_list > div')].slice(0, 10).forEach((n, i) => {
setTimeout(() => n.style.opacity = 1, i * 30);
});
JSON.stringify(user, (k, v) => v instanceof Function ? v.toString() : v)