const blockSelector = 'селектор блоков';
const buttonSelector = 'селектор кнопок';
const activeClass = 'класс, показывающий блок';
const blocks = document.querySelectorAll(blockSelector);
const buttons = document.querySelectorAll(buttonSelector);
buttons.forEach((n, i) => {
n.addEventListener('click', () => {
blocks[i].classList.toggle(activeClass);
});
});
const onClick = function({ currentTarget: { dataset: { index } } }) {
this[index].classList.toggle(activeClass);
}.bind(document.querySelectorAll(blockSelector));
document.querySelectorAll(buttonSelector).forEach((n, i) => {
n.dataset.index = i;
n.addEventListener('click', onClick);
});
const blocks = document.querySelectorAll(blockSelector);
const buttons = document.querySelectorAll(buttonSelector);
buttons.forEach(n => n.addEventListener('click', onClick));
function onClick() {
const index = Array.prototype.indexOf.call(buttons, this);
blocks[index].classList.toggle(activeClass);
}
const containerSelector = '...';
), то индексы не нужны. Достаточно от нажатой кнопки подняться до общего предка кнопки и блока, и найти внутри блок (а можно даже и не искать, если добавлять класс контейнеру; конечно, стили придётся в этом случае немного изменить, вместо .блок.класс
будет .контейнер.класс .блок
):const toggleBlock = button => button
?.closest(containerSelector)
?.querySelector(blockSelector)
.classList
.toggle(activeClass);
// можно добавить обработчик клика каждой кнопке индивидуально
document.querySelectorAll(buttonSelector).forEach(function(n) {
n.addEventListener('click', this);
}, e => toggleBlock(e.currentTarget));
// или один раз на всю страницу
document.addEventListener('click', e => {
toggleBlock(e.target.closest(buttonSelector));
});
"[object Object]"
. Всё.toString
(конечно, поступать так имеет смысл только в том случае, если вы можете гарантировать, что строковые представления будут уникальны). Проходит уже 3й день
$(function() {
$('#fileupload').change(function(event) {
var html_code = '';
for (var n = 0; n < event.target.files.length; n++) {
html_code += '<img src="'+URL.createObjectURL(event.target.files[n])+'" id="upload-img-'+Number(n+1)+'">';
}
$('.profile-images').html(html_code);
console.log('Выбраны файлы:', event.target.files);
});
});
const movingAverage = (data, windowSize) => {
let sum = data.slice(0, windowSize).reduce((acc, cur) => acc + cur, 0);
const result = [sum / windowSize];
for (let i = windowSize; i < data.length; i += 1) {
sum = sum - data[i - windowSize] + data[i];
result.push(sum / windowSize);
}
return result;
};
console.log(movingAverage([9, 3, 2, 0, 1, 5, 1, 0, 0], 3));
// Array(7) [ 4.666666666666667, 1.6666666666666667, 1, 2, 2.3333333333333335, 2, 0.3333333333333333 ]
var original = {
open: XMLHttpRequest.prototype.open,
send: XMLHttpRequest.prototype.send
};
XMLHttpRequest.prototype.open = function (method, url, async, user, password) {
console.log('Инициируется запрос:', method, url);
return original.open.call(this, method, url, async, user, password);
};
XMLHttpRequest.prototype.send = function (data) {
console.log('Отправляются данные:', data);
return original.send.call(this, data);
};
const text = 'Текст для сохранения';
const blob = new Blob([text], { type: 'text/plain' });
const content = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = content;
link.download = 'test.txt';
document.body.appendChild(link);
const click = new Event('click');
link.dispatchEvent(click);
link.remove();
let value = ' Illusion is the first of all pleasures. ';
value.split(" ").filter(n => n !== "");
['Illusion', 'is', 'the', 'first', 'of', 'all', 'pleasures.']
let value = ` Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod, tempor et dolore magna aliqua.
Amet facilisis magna!!!
Ornare quam viverra volutpat odio facilisis mauris. `;
value.split(" ").map(n => n.replace(/[\r\n.,!]/g, '')).filter(n => n !== "");
["Lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing",
"elit", "sed", "do", "eiusmod", "tempor", "et", "dolore",
"magna", "aliquaAmet", "facilisis", "magna", "Ornare", "quam",
"viverra", "volutpat", "odio", "facilisis", "mauris"]
let value = " Lorem ipsum. Dolor sit amet. Consectetur adipiscing elit. ";
value.split(".").map(n => n.trim()).filter(n => n!== "").map(n => `${n}.`):
['Lorem ipsum.', 'Dolor sit amet.', 'Consectetur adipiscing elit.']
let value = "Lorem ipsum, tempor magna aliqua. Dolor sit amet? Consectetur! Adipiscing elit.";
value.split(/[,.?!]/).map(n => n.trim()).filter(n => n!== "");
['Lorem ipsum', 'tempor et dolore magna aliqua', 'Dolor sit amet', 'Consectetur', 'Adipiscing elit']
мне нужно достать первую которая ответила статусом 200
const obj = new Proxy({}, {
get(target, key) {
const lowerKey = key.toLowerCase();
return target[Object.hasOwn(target, lowerKey) ? lowerKey : key];
},
set(target, key, val) {
target[key.toLowerCase()] = val;
return true;
},
has(target, key) {
return key in target || key.toLowerCase() in target;
},
defineProperty(target, key, descriptor) {
return Object.defineProperty(target, key.toLowerCase(), descriptor);
},
deleteProperty(target, key) {
return delete target[key.toLowerCase()];
},
getOwnPropertyDescriptor(target, key) {
return Object.getOwnPropertyDescriptor(target, key.toLowerCase());
},
});