if (counting >= 10) { level++; counting = 0;
function getScore(arr) {
const points = [ 0, 40, 100, 300, 1200 ];
let score = 0;
let lines = 0;
for (const n of arr) {
score += points[n] * (1 + (lines / 10 | 0));
lines += n;
}
return score;
}
$('.away-players').text(function(i, text) {
return $('.subs-players td:even')
.get()
.map(n => $(n).text().split(', '))
.reduce((text, n) => text.replace(n[1], `(${n.join(' ')})`), text);
});
Количество LI элементов заранее не известно, поэтому выполнять функцию WHEN с определенным количеством аргументов нет возможности.
$.when(...$('li').get().map(n => $.ajax())).then(/* выполняйте, чо там вам надо */);
this.data = new Proxy(... сделайтеreturn new Proxy(this, {
get(target, name) {
return name in target
? target[name]
: `Свойства ${name} нет`
},
});
for (const [ k, v ] of new URLSearchParams(url.replace(/.*\?/, ''))) {
document.querySelector(`#${k}`).value = v;
}url
.slice(url.indexOf('?') + 1)
.split('&')
.map(n => n.split('='))
.forEach(n => document.getElementById(n[0]).value = n[1]);const data = [...url.split('?').pop().matchAll(/([^&]+)=([^&]*)/g)];
for (let i = 0; i < data.length; i++) {
document.querySelector(`[id="${data[i][1]}"]`).value = data[i][2];
}
.hover {
opacity: 0.5;
}const map = document.querySelector('.map svg');
map.addEventListener('mouseover', onHover);
map.addEventListener('mouseout', onHover);
function onHover({ target: t }) {
this.querySelectorAll('.hover-effect').forEach(n => {
n.classList.toggle('hover', n !== t && this !== t);
});
}.map:hover .hover-effect {
opacity: 0.5;
}
.map:hover .hover-effect:hover {
opacity: 1;
}
Если выводить в консоль то коллекции не чем не отличаются.
HTMLCollection, хранящая элементы DOM, является динамической. При изменении документа она моментально отражает все произведённые изменения.// вариант раз - меняем направление обхода, от конца к началу:
for (let i = elements.length; i--;) {
elements.item(i).replaceWith();
}
// вариант два - удаляем нулевой элемент коллекции, пока он существует:
for (let n; n = elements[0]; n.remove()) ;
const keys = [ 'a', 'd', 'e', 'f' ];.const obj1 = {};
const obj2 = {};
for (const k in obj) {
if (obj.hasOwnProperty(k)) {
(keys.indexOf(k) > -1 ? obj2 : obj1)[k] = obj[k];
}
}const partition = (data, f) =>
Array.prototype.reduce.call(
data,
(acc, n, i, a) => (
acc[+!!f(n, i, a)].push(n),
acc
),
[ [], [] ]
);
const [ obj1, obj2 ] = partition(
Object.entries(obj),
n => keys.includes(n[0])
).map(Object.fromEntries);
$('.scheme-wrap polygon').click(function() {
$(`.scheme-wrap__item[data-id="${this.dataset.id}"] .scheme-wrap__popup`).show();
});.scheme-wrap__popup.visible {
display: block;
}document.querySelectorAll('.scheme-wrap polygon').forEach(n => {
n.addEventListener('click', onClick);
});
function onClick({ currentTarget: { dataset: { id } } }) {
const selector = `.scheme-wrap__item[data-id="${id}"] .scheme-wrap__popup`;
const popup = document.querySelector(selector);
if (popup) {
popup.classList.add('visible');
}
}
document.addEventListener('click', function(e) {
if (e.target.classList.contains('sbros')) {
for (let el = e.target; el = el.previousElementSibling;) {
if (el.classList.contains('fields')) {
el.value = el.getAttribute('default-value');
break;
}
}
}
});document.addEventListener('click', ({ target: t }) => {
if (t.matches('.sbros')) {
const el = t.closest('здесь селектор обёртки').querySelector('.fields');
el.value = el.getAttribute('default-value');
}
});const inputs = document.querySelectorAll('.fields');
const buttons = [...document.querySelectorAll('.sbros')];
buttons.forEach(n => n.addEventListener('click', onClick));
function onClick(e) {
const el = inputs[buttons.indexOf(e.target)];
el.value = el.getAttribute('default-value');
}
const chunkSize = 10;.const arr = [];
let i = -1;
for (const k in obj) {
const j = (++i / chunkSize) | 0;
(arr[j] = arr[j] || {})[k] = obj[k];
}const chunked = (data, chunkSize) =>
Array.from(
{ length: Math.ceil(data.length / chunkSize) },
(n, i) => data.slice(i * chunkSize, (i + 1) * chunkSize)
);
const arr = chunked(Object.keys(obj), chunkSize).map(n => {
return n.reduce((acc, k) => (acc[k] = obj[k], acc), {});
});function* chunked(data, chunkSize) {
const iter = data[Symbol.iterator]();
for (let chunk = [], n = {}; !n.done && (n = iter.next());) {
if ((n.done && chunk.length) || (!n.done && chunk.push(n.value) === chunkSize)) {
yield chunk;
chunk = [];
}
}
}
const arr = Array.from(chunked(Object.entries(obj), chunkSize), Object.fromEntries);
event.target.tagName != 'button'В XML (и XML-подобных языках) возвращаемое значение будет в нижнем регистре, а в HTML - в верхнем.
event.target.classList.contains('remove-button')
// или
event.target.matches('.remove-button')
$('.show').click(function() {
$(this).hide().next('.var').slideDown().find('.hide').show();
});
$('.hide').click(function() {
$(this).hide().closest('.var').slideUp().prev('.show').show();
});
rating = Math.max(1, Math.ceil((e.clientX - горизонтальнаяКоординатаЭлемента) / ширинаЭлемента * 5))
function group(data, key, val = n => n) {
const getKey = key instanceof Function ? key : n => n[key];
const getVal = val instanceof Function ? val : n => n[val];
const result = {};
for (const n of data) {
const k = getKey(n);
(result[k] = result[k] || []).push(getVal(n));
}
return result;
}group(arr, 'room')
// или
group(arr, n => n.room)group(Array(5).keys(), n => n % 2 ? 'нечётные' : 'чётные')group('a8-C!39', n => (
n.toLowerCase() !== n.toUpperCase() ? 'буква' :
!Number.isNaN(+n) ? 'цифра' :
'другое'
))<input name="xxx" value="69">
<input name="xxx" value="187">
<input name="xxx" value="666">
<input name="yyy" value="-1">group(document.querySelectorAll('input'), 'name', n => +n.value)
const containers = document.querySelectorAll('.counts');
const tag = 'div';
const className = 'count';
const count = 3;const html = [...Array(count)]
.map((_, i) => `<${tag} class="${className}">${i + 1}</${tag}>`)
.join('');
for (const n of containers) {
n.insertAdjacentHTML('beforeend', html);
}for (let i = 0; i < containers.length; i++) {
for (let j = 0; j < count;) {
const el = document.createElement(tag);
el.classList.add(className);
el.innerText = ++j;
containers[i].appendChild(el);
}
}const fragment = document.createDocumentFragment();
fragment.append(...Array.from({ length: count }, (_, i) => (
Object.assign(document.createElement(tag), {
textContent: -~i,
className,
})
)));
containers.forEach(n => n.append(fragment.cloneNode(true)));