const walk = (el, level = 0) =>
[...el.children].reduce((p, c) => {
c = walk(c, level + 1);
return p.level > c.level ? p : c;
}, { el, level });
const getLastDeepestElement = root => walk(root).el;
const getDeepestLastElement = el =>
el.lastElementChild
? getDeepestLastElement(el.lastElementChild)
: el;
// или, без рекурсии
const getDeepestLastElement = el => Array
.from(el.querySelectorAll('*'))
.pop() || el;
firebase.auth().onAuthStateChanged(user => {
if (user) {
store.dispatch('loggedUser', user);
}
new Vue(...);
});
.on('click', function(e) {
e.stopPropagation();
<script type="text/x-template" id="tree-template"> {{ item }} </script>
li
- вы же внутри ul
пытаетесь их выводить:<script type="text/x-template" id="tree-template">
<li>{{ item }}</li>
</script>
<ul v-for="item in items" :key="item.id"> <tree-items :item="item" ></tree-items> </ul>
v-for
внутрь списка (кстати, а какого чёрта в имени компонента элемента списка множественное число? почему items, а не item?):<ul>
<tree-items
v-for="item in items"
:key="item.id"
:item="item"
></tree-items>
</ul>
function isComposite($num) {
// нет, за вас я этого делать не буду, давайте как-нибудь сами...
// в конце концов, можно и нагуглить - это дело трёх секунд
}
$newArr = array_filter($arr, 'isComposite');
const valuesShow = [ 2000, ещё какое-то значение, и ещё, и ещё, ... ];
$('#sample_form_deliv').change(function({ target: { value } }) {
$('#sample_form_pay .input-label:eq(2)').toggle(valuesShow.includes(+value));
});
Array.prototype.reduce.call(
document.querySelector('table').rows,
(acc, n) => {
if (!n.classList.contains('no')) {
acc[acc.length - 1].info.push({
subtitle: n.querySelector('th').textContent,
cell: n.querySelector('td').textContent,
});
} else if (!n.querySelector('.no2')) {
acc.push({
title: n.querySelector('.car').textContent,
info: [],
});
}
return acc;
},
[]
)
<div ref="map">
mounted() {
this.map = L.map(this.$refs.map).setView([ 55.75222, 37.61556 ], 13);
...
x.domain([
d3.min(data, d => new Date(d.date)).setMonth(-1),
d3.max(data, d => new Date(d.date)),
]);
<v-data-table @click:row="onClickRow">
methods: {
onClickRow(item) {
console.log(item);
},
...
$(this).parents('.portfolio')
function parents(el, selector) {
const p = [];
while ((el = el.parentNode) !== document && el) {
(!selector || el.matches(selector)) && p.push(el);
}
return p;
}
parents(this, '.portfolio')
$(this).parent('.portfolio')
this.parentNode.classList.contains('portfolio') ? this.parentNode : null
$(this).children('.portfolio')
[...this.children].filter(n => n.classList.contains('portfolio'))
// или
Array.prototype.filter.call(this.children, n => n.matches('.portfolio'))
// или
this.querySelectorAll(':scope > .portfolio')
$(this).find('.portfolio')
this.querySelectorAll('.portfolio')
$(this).next('.portfolio')
(el => el && el.matches('.portfolio') ? el : null)(this.nextElementSibling)
const dropzone = event.currentTarget;
dropzone.insertBefore(draggableElement, event.target.closest('tr').nextElementSibling);
event.target.closest('tr').after(draggableElement);
new Vue({
store: store,
...
new Vue({
store: createStore(),
...