// Функция для переключения на определенную вкладку
function toTab(n) {
// Проверяем, является ли индекс n отрицательным
if (n < 0) {
return;
}
var x = document.getElementsByClassName("tab");
// Проверяем, не превышает ли индекс n количество вкладок
if (n >= x.length) {
return;
}
// Скрыть текущую вкладку:
x[currentTab].style.display = "none";
// Устанавливаем новую текущую вкладку
currentTab = n;
// Отображаем нужную вкладку:
showTab(n);
}
<button type="button" id="nextBtn" onclick="toTab(0)">Вернуться к первому шагу</button>
Я запутался в том, что хочу сделать.
но знаю что setTimeout работает криво,
накапливается или вовсе перестает работать
Как мне перезапускать скрипт после развертывания браузера телефона
let socket;
const url = "ws://your-websocket-server-url";
function connect() {
socket = new WebSocket(url);
socket.onopen = () => {};
socket.onmessage = (event) => {};
socket.onerror = (error) => {};
socket.onclose = (event) => {};
}
function reconnect() {
if (socket && socket.readyState !== WebSocket.CLOSED) return;
.....
}
function send(message) {
if (socket && socket.readyState === WebSocket.OPEN) {
socket.send(message);
return
}
console.warn("WebSocket is not open. Message not sent:", message);
....
}
document.addEventListener('visibilitychange', () => {
// document.hidden
if (document.visibilityState === 'visible' && websocket.readyState === WebSocket.CLOSED) {
reconnect();
}
});
API to allow messages to be pushed from a server to a browser, even when the site isn't focused or even open in the browser.
JavaScript test framework running on Node.js and in the browser
const sum = (a, b) => a + b;
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
const sum = (a, b) => a + b;
function testSum(description, a, b, expected) {
const result = sum(a, b);
if (result === expected) {
console.log(`✓ ${description}`);
} else {
console.error(`✗ ${description}: expected ${expected} but got ${result}`);
}
}
testSum('adds 1 + 2 to equal 3', 1, 2, 3);
const crypto = require("crypto");
const encryptedData =
"jPNGTNLtGIBc7Jv2UXj7a3FNQk13eUJ5T3VIUXlOS0ZVOEpnMUpPMnhvQXg5bE5kMGFHejVxaTFnYTA9";
const key = "qEExPE+jkJxQUt8fSO+XwzXgRGh6kLHy+lWEe6Z8T6s=";
const decodedKey = Buffer.from(key, "base64");
const decodedData = Buffer.from(encryptedData, "base64");
const ivLength = 16;
const iv = decodedData.slice(0, ivLength);
const encryptedText = decodedData.slice(ivLength);
const decipher = crypto.createDecipheriv("aes-256-cbc", decodedKey, iv);
try {
let decrypted = decipher.update(encryptedText, null, "utf8");
decrypted += decipher.final("utf8");
console.log("Расшифрованная строка:", decrypted);
} catch (error) {
console.error("Ошибка расшифровки:", error.message);
}
const commonOpt = {
key: 'val',
key1: 'val1'
}
const unitedOpt = {
...commonOpt,
key: 'lav'
}
const commonOpt = {
key: 'val',
key1: 'val1'
}
const unitedOpt = Object.assign(commonOpt, { key: 'lav' })
.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic, .swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
left: 50%;
transform: translateX(-50%);
white-space: nowrap;
}
.swiper-pagination-bullets {
left: 0 !important;
transform: translateX(0) !important;
}
const childElement = document.getElementById('child'); // находим потомка
const parentElement = childElement.parentNode; // находим родителя
// Создаем новый элемент
const newElement = document.createElement('p');
newElement.textContent = 'Новый элемент';
// Заменяем старый элемент на новый
parentElement.replaceChild(newElement, childElement);
const oldElement = document.getElementById('old');
// Создаем новый элемент
const newElement = document.createElement('div');
newElement.textContent = 'Новый элемент';
// Заменяем старый элемент новым
oldElement.replaceWith(newElement);
const oldElement = document.getElementById('old');
oldElement.replaceWith(document.createRange().createContextualFragment(`
<div class="box box2">
<p1>hello world</p1>
</div>
`));
... {
opacity: 0;
scale: 0
}
const queryString =
"room_number[]=2&room_number[]=3&room_number[]=4&price_min=111&price_max=999&area[]=Ленинский район"
function convertQueryString(query) {
const result = []
const pairs = query.split("&")
pairs.forEach((pair) => {
const [name, value] = pair.split("=")
const cleanName = name.replace(/\[\]/g, "")
result.push({
name: cleanName,
value: decodeURIComponent(value),
})
})
return result
}
const output = convertQueryString(queryString)
console.log(output)
const queryString = "room_number[]=2&room_number[]=3&room_number[]=4&price_min=111&price_max=999&area[]=Ленинский район";
const output = queryString.split('&').map(pair => {
const [name, value] = pair.split('=')
return {
name: name.replace(/\[\]/g, ''),
value: decodeURIComponent(value),
}
})
console.log(output)
function scrollToElementWithOffset(element, offset = 0, behavior = 'smooth') {
const elementTopPosition = element.getBoundingClientRect().top
const offsetPosition = elementTopPosition + window.pageYOffset - offset
window.scrollTo({
top: offsetPosition,
behavior,
})
}
const targetElement = document.querySelector('#myElement');
scrollToElementWithOffset(targetElement, 100)
let events = {
'2019-12-29': ['name1', 'name3', 'name5', 'name7'],
'2019-12-30': ['name4', 'name8', 'name9'],
'2019-12-31': ['name2', 'name6']
};
// Преобразуем объект в массив объектов с помощью метода reduce
// Object.keys(events) возвращает массив дат (ключей объекта events)
let result = Object.keys(events).reduce((acc, date) => {
// acc (аккумулятор) — это значение, которое сохраняется между итерациями
// date — это текущий элемент массива (в данном случае дата из объекта events)
// На каждой итерации для текущей даты перебираем все события
events[date].forEach(event => {
// Добавляем объект { date, event } в аккумуляторный массив acc
acc.push({ date, event });
});
// Возвращаем аккумулятор после обработки всех событий для текущей даты
return acc;
}, []); // [] — начальное значение аккумулятора, с которого начинается накапливание данных
// Как работает reduce:
// 1. В начале acc равен [] (пустой массив).
// 2. На каждой итерации мы добавляем в acc новые объекты { date, event }.
// 3. Когда все даты и события обработаны, reduce возвращает конечный аккумулятор — массив объектов.
// Выводим результат в консоль
console.log(result);
When bundling with Webpack for the backend - you usually don't want to bundle its node_modules dependencies. This library creates an externals function that ignores node_modules when bundling in Webpack.
$('.daterangepicker').addClass('opensleft').removeClass('opensright');
// $('.daterangepicker').addClass('opensright').removeClass('opensleft');