div.innerHTML +="qwe"
+=
- вам кажется, будто бы к содержимому div что-то там добавляется. Это не совсем так - содержимое div полностью перезаписывается. Соответственно, ранее добавленные элементы будут удалены и заменены новыми. А к новым элементам никаких обработчиков вы не привязываете - отсюда и отсутствие вывода в консоль..slice(0, 3)
.aux.select();
сделайтеaux.focus();
aux.setSelectionRange(0, 3);
нужно до плюса скопировать, там не всегда 3 символа может быть
'+'
с помощью indexOf
..match(/[^+]*/)
), или удалите его и то, что после (.replace(/\+.*/, '')
). Promise.all(items.map((item, index) => axios.post(responses[index], item, config)))
const container = document.querySelector('nav');
const itemSelector = '.sidebar-item';
const className = 'selected';
container.addEventListener('click', function(e) {
const item = e.target.closest(itemSelector);
if (item) {
const activeItem = this.querySelector(`.${className}`);
if (activeItem) {
activeItem.classList.remove(className);
}
item.classList.add(className);
}
});
container.addEventListener('click', e => {
const item = e.target.closest(itemSelector);
if (item) {
for (const n of e.currentTarget.querySelectorAll(itemSelector)) {
n.classList.toggle(className, n === item);
}
}
});
const items = container.querySelectorAll(itemSelector);
const onClick = e => items.forEach(n => n.classList.toggle(className, n === e.currentTarget));
items.forEach(n => n.addEventListener('click', onClick));
<div id="progressBar"></div>
<button>green</button>
<button>red</button>
<button>yellow</button>
<button>magenta</button>
<button>aqua</button>
let percent = 0;
const gradientParts = [];
$('button').click(function() {
if (percent < 100) {
const color = $(this).text();
percent++;
gradientParts.push(`${color} ${percent - 1}%`, `${color} ${percent}%`);
const gradient = gradientParts.concat(`#435C91 ${percent}%`, '#435C91 100%');
$('#progressBar').css({
background: `linear-gradient(to right, ${gradient.join(', ')})`,
});
}
});
const rows = 3;
const cols = 5;
const max = 10;
const arr =
Array.from({ length: rows }, () =>
Array.from({ length: cols }, () =>
Math.random() * max | 0
)
);
const sumRows = arr.map(n => n.reduce((acc, m) => acc + m, 0));
const sumCols = (arr[0] || []).map((n, i) => arr.reduce((acc, m) => acc + m[i], 0));
// или
const [ sumRows, sumCols ] = arr.reduce((acc, n, i) => (
n.forEach((m, j) => (acc[0][i] += m, acc[1][j] += m)),
acc
), [ rows, cols ].map(n => Array(n).fill(0)));
интересуют только кастомные маркеры...
...и блоки с описанием этих маркеров
.label-text
переключайте класс у максимально дальних не общих предков input'ов, т.е., у .thumb
. Соответственно, стилизовать надо будет не .label-text.класс
, а .класс .label-text
. Зачем делать именно так? Потому что не придётся переписывать js-код, если вдруг вам завтра захочется кроме .label-text
стилизовать ещё что-то, или решите изменить взаимное расположение элементов.const containerSelector = '.thumb';
const inputSelector = 'input[id^="input-"]';
const activeClass = 'active';
$(containerSelector).on('input', inputSelector, function(e) {
$(e.delegateTarget).toggleClass(activeClass, !!this.value);
});
const onInput = ({ target: t, currentTarget: ct }) =>
t.matches(inputSelector) && ct.classList.toggle(activeClass, !!t.value);
document.querySelectorAll(containerSelector).forEach(n => {
n.addEventListener('input', onInput);
});
for (let j = 1; j <= this.players; j++) {
this.card.dataset.playerId = j; // а тут устанавливаем playerId. Но он у меня постоянно одинаковый
}
this.card.dataset.playerId = i <= this.players ? i : ((Math.random() * this.players | 0) + 1);
<div id="app" @click="onClick">
...
new Vue({
el: '#app',
methods: {
onClick(e) {
if (e.target.tagName === 'A') {
e.preventDefault();
window.open(e.target.getAttribute('href'));
}
},
...
},
...
});
const className = 'здесь должен быть класс ваших input\'ов';
const inputs = document.querySelectorAll(`.${className}`);
// или
const inputs = document.getElementsByClassName(className);
const values = Array.from(inputs, n => n.value);
// или
const values = Array.prototype.map.call(inputs, n => n.value);
// или
const values = [];
for (const n of inputs) {
values.push(n.value);
}
// или
const values = [];
for (let i = 0; i < inputs.length; i++) {
values[i] = inputs[i].value;
}
// или
const values = (function get(i) {
return inputs[i] ? [ inputs[i].value, ...get(i + 1) ] : [];
})(0);
$('.cart-window ul').each
на $('.cart-window ul .item').each
, а $(this).find('.item span').text()
замените на $(this).find('span').text()
.Этот код вместо результата выводит undefined.
const elements = document.querySelectorAll('.news-full-text img');
for (const n of elements) {
const el = document.createElement('div');
el.className = 'image';
el.appendChild(document.createElement('div'));
el.lastChild.className = 'image-social';
el.lastChild.textContent = 'социальные кнопки';
n.insertAdjacentElement('afterend', el);
el.insertAdjacentElement('afterbegin', n);
}
elements.forEach(n => n.outerHTML = `
<div class="image">
${n.outerHTML}
<div class="image-social">социальные кнопки</div>
</div>
`);
const containerSelector = '.spoiler-container';
const headerSelector = '.spoiler-header';
const contentSelector = '.spoiler-content';
const activeClass = 'active';
const toggleEffect = 'slideToggle'; // или fadeToggle, или toggle
const hideEffect = 'slideUp'; // или fadeOut, или hide
function toggle($containers, $container) {
$containers
.not($container)
.removeClass(activeClass)
.find(contentSelector)
[hideEffect]();
$container
.toggleClass(activeClass)
.find(contentSelector)
[toggleEffect]();
}
const $containers = $(containerSelector).on('click', headerSelector, e => {
toggle($containers, $(e.delegateTarget));
});
$(document).on('click', `${containerSelector} ${headerSelector}`, e => {
toggle($(containerSelector), $(e.target).closest(containerSelector));
});