let parentObject = document.querySelector(/* селектор для родительского элемента, можно body*/);
let span = document.querySelectorAll(".yith-wcwl-items-count");
const config = {
attributes: true,
childList: true,
subtree: true
};
// Колбэк-функция при срабатывании мутации
const callback = function(mutationsList, observer) {
for (let i = 0; i < span.length; i++) {
let isEmpty = Number( span[i].textContent ) === 0;
span[i].classList[ isEmpty ? "add" : "remove" ]("hidden");
}
};
// Создаём экземпляр наблюдателя с указанной функцией колбэка
const observer = new MutationObserver(callback);
// Начинаем наблюдение за настроенными изменениями целевого элемента
observer.observe(parentObject , config);
<div id="container">
<div id="cards">
<!-- содержимое, карточки -->
</div>
</div>
const container = document.getElementById('container');
const cards = document.getElementById('cards');
// разница между правым краем cards и container
console.log(container.offsetWidth - (cards.offsetWidth + cards.offsetLeft));
// cards.offsetLeft может быть отрицательным
// Если console.log вернул отрицательное значение, значит карточки шире родительского блока
let currentPage = 0; // начинать лучше с нуля
let booksOnPage = 4;
return data.map((book, index) => ({
fields: {
number: (currentPage * booksOnPage) +index + 1,
if (!isset($_SESSION['is_add_to_db'])) {
// добавление в БД, проверка избавит вас от лишних запросов в БД
}
<button type="button">Активная</button>
<button type="button" disabled>Не активная</button>
<button type="button" id="button1">Будет неактивная после выполнения скрипта</button>
const button = document.getElementById('button1');
button.setAttribute('disabled', 'disabled');
button:disabled {
/* стили */
}
<input name="test1" class="js-validate" data-validate-name="validate1" />
<input name="test2" class="js-validate" data-validate-name="validate2" />
document.querySelectorAll('.js-validate').forEach(function(item) {
item.addEventListener('onchange', function(event){
// event.target - измененный элемент
// event.target.value
// event.target.getAttribete('data-validate-name') - какую валидацию вы хотите
// тут вызывать Ajax запрос с требуемыми параметрами, когда придёт ответ
});
});
let i = 0;
function changeI(newValue) {
let oldI = i; // дополнительная переменная задаётся на случай если someFunc использует i в расчетах
i = newValue;
if(i - oldI == 10) {
someFunc();
}
}
function someFunc() { console.log('Изменилась на 10');}
<a href="'.$directory.'/'.$row['video_name'].'">
<video width="100%" height="100%" src="'.$directory.'/'.$row['video_name'].'">'.$row['title'].'</video><span class="time">3:15</span></a>
function loadScript(filepath) {
var b = document.getElementsByTagName('body')[0];
var s = document.createElement('script');
s.setAttribute('src', filepath);
s.setAttribute('async', 'async');
b.append(s);
}