$.fn.glow = function(delay = 1000) {
return this.each(function() {
let interval;
const startGlow = () => {
interval = setInterval(() => $(this).toggleClass('glow'), delay);
}
const stopGlow = () => {
clearInterval(interval);
}
$(this).on('mouseenter', stopGlow);
$(this).on('mouseleave', startGlow);
startGlow();
return this;
})
}
$('.glowable').glow();
::-moz-scrollbar
, но для элемента можно сделать scrollbar-width: none;
:div {
max-height: 120px;
overflow-y: auto;
overflow-x: none;
scrollbar-width: none;
}
div::-webkit-scrollbar {
display: none;
}
scrollbar-width
, и скролбар после этого исчезает корректно в Firefox. const quantityElement = document.querySelector('#quantityitog');
const plusButtonElement = document.querySelector('#plustab');
const minusButtonElement = document.querySelector('#minustab');
const totalElement = document.querySelector('#totalprice');
const priceElement = document.querySelector('#countprice');
let total = +totalElement.innerText;
let qty = +quantityElement.innerText;
let price = +priceElement.innerText;
function updateView(){
totalElement.innerHTML = total;
}
function increment(){
qty++;
total = Math.trunc((qty * price) * 100) / 100;
updateView();
}
function decrement(){
qty--;
total = Math.trunc((total - price) * 100) / 100;
if (total < 0) total = 0;
updateView();
}
plusButtonElement.addEventListener('click', increment)
minusButtonElement.addEventListener('click', decrement)
Просто актуальной инфы так мало по этому, а я вылез из 2015 года.
map
, filter
, some
и т.д.), принимающую элемент массива и возвращающую true
в случае, если элемент должен быть удалён. Если элемент удалять не надо, то следует обработать массив вложенных элементов - выполняется рекурсивный вызов. Как это может выглядеть:function deleteNested(arr, fn) {
arr?.reduceRight?.((_, n, i, a) =>
fn(n, i, a)
? a.splice(i, 1)
: deleteNested(n.children, fn)
, null);
}
function deleteNested(arr, fn) {
if (Array.isArray(arr)) {
arr.splice(0, arr.length, ...arr.filter((n, i, a) => {
return !fn(n, i, a) && (deleteNested(n.children, fn), true);
}));
}
}
function deleteNested(arr, fn) {
if (arr instanceof Array) {
let numDeleted = 0;
for (const [ i, n ] of arr.entries()) {
if (fn(n, i, arr)) {
numDeleted++;
} else {
arr[i - numDeleted] = n;
deleteNested(n.children, fn);
}
}
arr.length -= numDeleted;
}
}
deleteNested(itemsData, n => n.id === id_объекта_который_надо_удалить);
onSelectorClick
определяется что если клик произошёл на кнопку с крестиком, то удалить родительский элемент кнопки. В итоге получаем всего один слушатель на все элементы selector сколько бы их не было.)