Разбираюсь, как устроен vuejs
в this экземпляр vue
background-image: repeating-linear-gradient(45deg, #fff, #fff 2px, transparent 2px, transparent 50px);
taskList.map(function(item) { return ( <Task data_text={item.text} key={item.id} delete={this.deleteTaskHandler}/> ) })
this.deleteTaskHandler
- это не метод компонента.onCLick={this.props.deleteTaskHandler()}
deleteTaskHandler
, если передаёте в экземпляр компонента delete
?Object.values(arr.reduce((acc, n) => {
if (n) {
const k = n[0];
acc[k] = acc[k]?.length > n.length ? acc[k] : n;
}
return acc;
}, {}))
"пик" это элемент массива с длиной больше чем предыдущий элемент и следующий
arr.filter((n, i, a) => a[i - 1]?.length < n.length && n.length > a[i + 1]?.length)
.active {
color: red;
}
const startFrom = '.link';
const parent = 'li';
const child = 'a';
const className = 'active';
$(startFrom).parents(parent).children(child).addClass(className);
// или
for (
let el = document.querySelector(startFrom);
el = el.parentNode.closest(parent);
el.querySelectorAll(`:scope > ${child}`).forEach(n => n.classList.add(className))
) ;
const input = document.querySelector('.inputprice');
const container = document.querySelector('.inner');
const itemSelector = '.box';
const buttonSelector = `${itemSelector} .btn`;
const valueSelector = `${itemSelector} .box-title`;
container.addEventListener('click', ({ target: t }) => {
const item = t.closest(buttonSelector)?.closest(itemSelector);
if (item) {
input.value = item.querySelector(valueSelector).innerText;
}
});
// или
const onClick = el => input.value = el.textContent.trim();
container.querySelectorAll(buttonSelector).forEach(function(n, i) {
n.addEventListener('click', onClick.bind(null, this[i]));
}, document.querySelectorAll(valueSelector));
.comment-item.active .comment-item__form {
display: block;
}
const itemSelector = '.comment-item';
const buttonSelector = '.comment-item__reply';
const activeClass = 'active';
document.addEventListener('click', e => {
const item = e.target.closest(buttonSelector)?.closest(itemSelector);
if (item) {
document.querySelectorAll(itemSelector).forEach(n => {
n.classList.toggle(activeClass, n === item);
});
}
});
const numChunks = 6;
const chunkLen = arr.length / numChunks | 0;
const chunks = Array.from({ length: numChunks }, (n, i) => {
return arr.slice(i * chunkLen, i === numChunks - 1 ? arr.length : (i + 1) * chunkLen);
});
removeEventListener
не то, что передавали в addEventListener
. Смотрите сами:document.addEventListener('click', clickerOut(parent));
document.removeEventListener('click', clickerOut);
clickerOut(parent)
и clickerOut
- это что по-вашему, одно и то же? Никак нет.function clickerOut(parent) {
return function handler(e) {
...
document.removeEventListener('click', handler);
}
}
Phrasing content, but no descendant label
elements. No labelable elements other than the labeled control are allowed.
function App() {
const [ numbers, setNumbers ] = React.useState([ 1, 2, 3 ]);
const [ timerId, setTimerId ] = React.useState(null);
const add = () => setNumbers(numbers => [ ...numbers, Math.random() * 10 | 0 ]);
const start = () => setTimerId(setInterval(add, 1000));
const stop = () => (clearInterval(timerId), setTimerId(null));
return (
<div>
<ul>
{numbers.map(n => <li>{n}</li>)}
</ul>
<div>
<button onClick={add} disabled={timerId}>Добавить число</button>
<button onClick={start} disabled={timerId}>Старт</button>
<button onClick={stop} disabled={!timerId}>Стоп</button>
</div>
</div>
);
}
$key = 'property';
$val = 2;
$toReverse = array_filter($array, function($n) use($key, $val) {
return $n[$key] === $val;
});
$newArray = array_map(function($n) use(&$toReverse, $key, $val) {
return $n[$key] === $val ? array_pop($toReverse) : $n;
}, $array);
const arr = Object
.entries(obj)
.reduce((acc, [ k, v ]) => (
k = k.match(/([a-z]+)(\d+$)/),
(acc[k[2]] ??= {})[k[1]] = v,
acc
), []);
const os = Object.fromEntries(arr.map(n => [ n.system, 0 ]));
const count = arr.reduce((acc, n) => ((acc[n.name] ??= { ...os })[n.system]++, acc), {});
console.log(Object
.entries(count)
.map(n => `${n[0]}: ${Object.entries(n[1]).map(m => m.join(' - ')).join(', ')}`)
.join('\n')
);
$('.el1--closed').one('click', function() {
$(this)
.siblings()
.slideToggle();
});
$('.block').on('click', '.el1--closed', function() {
$(this)
.removeClass('el1--closed')
.siblings()
.slideToggle();
});