{ точка: сегмент }
). Находим начальный сегмент маршрута - такой, начальная точка которого не является ничьей конечной. Следующий сегмент маршрута - такой, начальная точка которого является конечной точкой текущего сегмента. Ну и крутим цикл до тех пор, пока текущий сегмент маршрута существует, не забывая сохранять его в результирующий массив:function sort(route) {
const pointsFrom = Object.fromEntries(route.map(n => [ n.from, n ]));
const pointsTo = Object.fromEntries(route.map(n => [ n.to, n ]));
const sorted = [];
for (
let segment = route.find(n => !pointsTo[n.from]);
segment;
segment = pointsFrom[segment.to]
) {
sorted.push(segment);
}
return sorted;
}
const filteredPeople = people.filter(n => n.name.includes(searchFilter));
<ul className="list-group">
{filteredPeople.map(n => (
...
select.addEventListener('change', function() {
swiper.slideTo(this.selectedIndex);
});
Object.keys(a).forEach(n => b.hasOwnProperty(n) && (a[n] = b[n]));
for (const [ k, v ] of Object.entries(b)) {
if (a.hasOwnProperty(k)) {
a[k] = v;
}
}
const appSingle = new Vue({
.planslider-enter-from {
.planslider-leave-from {
<transition-group tag="div" class="single-estate-planimetry__slider" name="planslider" appear> <div v-if="index === currentPlanimetry" :data-index="index" class="single-estate__descr-img" v-for="(item, index) in planimetry" :key="item.nome">
transition-group
на transition
. Убрать v-if
и v-for
. Сделать вычисляемое свойство, представляющее текущий элемент. React гарантирует, что идентичность функции setState
стабильна и не изменяется при повторных рендерах.
- .box.closed .list {
- display: none;
- }
+ .box .list {
+ display: none;
+ }
+ .box.opened .list {
+ display: block;
+ }
const containerSelector = '.section';
const itemSelector = '.box';
const buttonSelector = '.control-label';
const activeClass = 'opened';
// jquery, как вы и хотели
$(itemSelector).on('click', buttonSelector, ({ delegateTarget: t }) => $(t)
.toggleClass(activeClass)
.closest(containerSelector)
.find(itemSelector)
.not(t)
.removeClass(activeClass)
);
// или, к чёрту jquery;
// вешаем обработчик клика на каждый заголовок
const onClick = ({ currentTarget: t }) => t
.closest(containerSelector)
.querySelectorAll(itemSelector)
.forEach(function(n) {
n.classList[n === this ? 'toggle' : 'remove'](activeClass);
}, t.closest(itemSelector));
document
.querySelectorAll(`${containerSelector} ${buttonSelector}`)
.forEach(n => n.addEventListener('click', onClick));
// или, добавляем обработчик клика один раз для всех
document.addEventListener('click', ({ target: t }) => t
.closest(buttonSelector)
?.closest(containerSelector)
?.querySelectorAll(itemSelector)
.forEach(n => n.classList[n.contains(t) ? 'toggle' : 'remove'](activeClass))
);
const names = Array.from(
document.querySelectorAll('#mainTable input:checked'),
n => n.name
);
const names = Array.prototype.reduce.call(
document.getElementById('mainTable').getElementsByTagName('input'),
(acc, n) => (n.checked && acc.push(n.getAttribute('name')), acc),
[]
);
.active {
background: red;
}
document.querySelector('table').addEventListener('change', ({ target: t }) => {
t.closest('tr').classList.toggle('active', t.checked);
});
// или
document.querySelectorAll('table tr').forEach(function(n) {
n.addEventListener('change', this);
}, e => e.currentTarget.classList.toggle('active', e.target.checked));
tr:has(.form-check-input:checked) {
background: red;
}
<div class="error" v-if="$v.forms.additional.$dirty && $v.forms.additional.$invalid">
additional: this.visible ? { required } : {},
Как это вообще работает?
Как мне при срезе включать последний элемент списка?
-1
, просто -3:
. function collectValues(target, ...sources) {
const onInput = () => target.value = sources.map(n => n.value).join(', ');
sources.forEach(n => n.addEventListener('input', onInput));
return () => sources.forEach(n => n.removeEventListener('input', onInput));
}
collectValues(...document.querySelectorAll('input'));
transition
на transition-group
, сдвигаем его влево на ширину слайда; показываем слайды не с активного, а с предшествующего активному; чтобы не видеть, как первый слайд, ставший последним, уезжает в конец, задаём слайдам z-index
. Вот говнокод.