const options = [ 'first', 'second', 'third', 'fourth' ];
const $table = $('table');
$('button').click(function() {
$table.append(`
<tr>
<td>
<select>
<option disabled selected>-</option>
${options.map(n => `<option>${n}</option>`).join('')}
</select>
</td>
<td>
<button class="del">del</button>
</td>
</tr>
`);
updateDisabled();
});
$table
.change(updateDisabled)
.on('click', '.del', function() {
$(this).closest('tr').remove();
updateDisabled();
});
function updateDisabled() {
const $select = $table.find('select');
const selectedOptions = $select.get().map(n => n.value);
$select.find('option').prop('disabled', function() {
return selectedOptions.includes(this.value);
});
}
300
---> '300px'
.#xxxten.big {
width: 300px;
}
document.querySelector('#xxxten').addEventListener('click', function() {
this.classList.toggle('big');
});
получаю ошибку: this.currentGen.snps.genotypes is undefined
var result = {};
- и всё будет нормально. document.querySelector('button').addEventListener('click', function() {
const bar = document.querySelector('#progress');
const label = document.querySelector('#procent');
let width = 0;
const interval = setInterval(function() {
if (++width >= 100) {
clearInterval(interval);
}
bar.style.width = label.innerText = `${width}%`;
}, 10);
});
document.querySelectorAll('.news-item_title').forEach(n => {
n.querySelector('.tit_link').textContent = '[Подробнее]';
n.closest('.news-block_item').append(n);
});
for...of
можно без проблем комбинировать с querySelectorAll
, то чтобы тут использовать forEach
, придётся коду получения элементов добавить обёртку - [...document.getElementsByClassName('...')]
):for (const n of document.getElementsByClassName('tit_link')) {
n.innerText = '[Подробнее]';
n.parentNode.parentNode.appendChild(n.parentNode);
}
const items = document.querySelector('.news-block_wrap').children;
for (let i = 0; i < items.length; i++) {
items[i].children[1].children[0].innerHTML = '[Подробнее]';
items[i].insertAdjacentElement('beforeend', items[i].children[1]);
}
'/^\+372((( |-)?\d){8,})$/'
. function updateSum() {
const sum = $('.order-table .number').get().reduce((acc, n) => {
const price = +$(n).prev().text().replace(',', '.');
const count = +$('input', n).val();
return acc + price * count;
}, 0);
$('.order-end-form input[type="text"]').val(sum.toFixed(2));
}
$('.order-table')
.on('click', '.plus, .minus', function() {
const change = $(this).hasClass('plus') ? 1 : -1;
$(this).siblings('input').val((i, val) => Math.max(0, +val + change));
updateSum();
})
.on('input', '.number input', function() {
$(this).val((i, val) => Math.max(0, val | 0));
updateSum();
});
new Date(2017, 0, 1)
? Это первое января текущего года. То есть, условие (new Date()) > ts
всегда оказывается истинным, и... ну да, выставляется дата, на 27 дней больше текущей. Ничего удивительного, что у вас постоянно происходит "обновление счета". Вы уж разберитесь, к какому моменту времени надо делать обратный отсчёт. .recent:hover .info {
.info
находится не внутри, а после .recent
. Делайте так:.recent:hover ~ .info {
Function("process", "return process")(null)
. const a = [ 'a', 'b', 'c', 'd' ];
const b = [ 'a', 'b', 'x', 'y', 'z' ];
const c = a.filter(n => b.indexOf(n) === -1);
// или
const c = a.filter(n => !b.includes(n));
function diff(data1, data2, key = n => n) {
const getKey = key instanceof Function ? key : n => n[key];
const keys = new Set(Array.from(data2, getKey));
return Array.prototype.filter.call(data1, n => !keys.has(getKey(n)));
}
diff([1, 2, 3], [2]) // [1, 3]
diff([{id: 1}, {id: 2}, {id: 3}], [{id: 1}, {id: 3}], 'id') // [{id: 2}]
diff('AbCdE', 'aBc', n => n.toLowerCase()) // ['d', 'E']
Если функция parseInt
встречает символ, не являющийся числом в указанной системе счисления, она пропускает этот и все последующие символы
+/\d+/.exec(el)
.