arr.map(n => ({
id: n.id.value,
title: n.title.value,
slug: n.slug.value
}))
arr.map(n => Object.entries(n).reduce((acc, [ k, v ]) => (acc[k] = v.value, acc), {}))
arr.map(n => Object.keys(n).reduce((acc, k) => ({ ...acc, [k]: n[k].value }), {}))
arr.map(n => Object.assign({}, ...Object.values(n).map(m => ({ [m.title.toLowerCase()]: m.value }))))
.wrap
:.wrap-active {
transform: translateY(-100%);
}
$('.wrap').on('click', 'a', function(e) {
e.preventDefault();
$(e.delegateTarget).toggleClass('wrap-active');
});
.wrap
добавляем скрытый чекбокс:<input type="checkbox" id="toggle" hidden>
<a href="#">Day</a>
---> <label for="toggle">Day</label>
<a href="#">Night</a>
---> <label for="toggle">Night</label>
.wrap
не при наличии дополнительного класса, а если чекбокс перед ним выставлен:.wrap-active {
---> #toggle:checked + .wrap {
$("td.price").text()
$(this).closest('tr').find('td.price').text()
const sum = $items => $items.get().reduce((acc, n) => acc + +$(n).text(), 0);
function update($el, change) {
const $tr = $el.closest('tr');
const $count = $tr.find('.quantity-field').val((i, val) => Math.max(1, (val | 0) + change));
$tr.find('.sum').text($count.val() * $tr.find('.price').text());
$tr.nextAll('.total-tr').first().find('span').text(sum($tr
.add($tr.prevUntil('.total-tr'))
.add($tr.nextUntil('.total-tr'))
.find('.sum')
));
$table.find('.total-summ span').text(sum($table.find('.total-tr span')));
}
const $table = $('table')
.on('click', '.button-plus, .button-minus', function() {
const $btn = $(this);
update($btn, +$btn.hasClass('button-plus') || -$btn.hasClass('button-minus'));
})
.on('input', '.quantity-field', function() {
update($(this), 0);
});
$table.find('.quantity-field').trigger('input');
const sum = items =>
Array.prototype.reduce.call(items, (acc, n) => acc + +n.textContent, 0);
function update(el, change) {
let tr = el.closest('tr');
const count = tr.querySelector('.quantity-field');
count.value = Math.max(1, (count.value | 0) + change);
tr.querySelector('.sum').innerText = count.value * tr.querySelector('.price').innerText;
const rows = [];
let total = tr;
for (; !(total = total.nextElementSibling).matches('.total-tr'); rows.push(total)) ;
for (; tr && !tr.matches('.total-tr'); rows.push(tr), tr = tr.previousElementSibling) ;
total.querySelector('span').innerText = sum(Array.from(rows, n => n.querySelector('.sum')));
table.querySelector('.total-summ span').innerText = sum(table.querySelectorAll('.total-tr span'));
}
const table = document.querySelector('table');
table.addEventListener('input', e => update(e.target, 0));
table.addEventListener('click', ({ target: t }) => {
const change = +t.matches('.button-plus') || -t.matches('.button-minus');
if (change) {
update(t, change);
}
});
table.querySelectorAll('.quantity-field').forEach(n => {
n.dispatchEvent(new Event('input', { bubbles: true }));
});
const links = [
'https://youtu.be/fi5LDM9ppuc',
'https://www.youtube.com/embed/fi5LDM9ppuc',
];
const newLinks = links.map(n => `https://www.youtube.com/watch?v=${n.split('/').pop()}`);
methods: {
plainObj(obj) {
return Object.entries(obj).reduce((acc, [ k, v ]) => {
if (v instanceof Object) {
Object.assign(acc, this.plainObj(v));
} else {
acc[k] = v;
}
return acc;
}, {});
}
}
<li v-for="value in plainObj(object)" class="list-group-item">{{ value }}</li>
Vue.component('list-obj', {
template: `
<ul class="list-group">
<li v-for="value in obj" class="list-group-item">
<list-obj v-if="value instanceof Object" :obj="value"></list-obj>
<span v-else>{{ value }}</span>
</li>
</ul>`,
props: [ 'obj' ]
});
<list-obj :obj="object"></list-obj>
state: {
items: [
{ title: '...', liked: false },
{ title: '...', liked: false },
...
mutations: {
toggleLike: (state, item) => item.liked = !item.liked,
...
<li
v-for="n in $store.state.items"
:class="{ liked: n.liked }"
@click="$store.commit('toggleLike', n)"
...
removePost(picId: number) {
this.remove.emit(picId);
}
removePost(picId: number) {
this.collection = this.collection.filter(p => p.id !== picId);
}
RegExp('(?:^|\s)([' + arg + '][.]*)','gi');
g
, выделение первых букв в отдельную группу и точки, которых может вообще не быть? Вы же вроде фильтрацию делаете.RegExp(`(?:^|\\s)[${arg}]`, 'i')
.this.filter = expr;
v-model
.