imgWrap.innerHTML = img;
imgWrap.appendChild(img);
img
у вас – объект HTMLElement, а не текст HTML. $('input').removeAttr('maxlength');
input
, которое у вас уже обрабатывается, забирайте значение и удаляйте лишнее: пробелы, скобки, "+7" в начале. Если и после этого длина больше 10, ну, отрежьте какие-то цифры в начале или в конце, по вкусу ) Promise
, async
/ await
– вот это всё.success
innerHTML
и innerText
— и задать вопрос «как бы сделать то-то, но без такого-то недостатка».[...document.querySelector('#my-div').children].forEach(el => el.remove())
Но зачем? Что выиграли?user_id
, и подписанный секретным ключом, известным только серверу. Тогда на сервере можно проверить, что назад из AJAX-вызова придёт исходный токен и убедиться в его подлинности. // Найти наибольшую длину среди массивов – столько будет строк
const maxLength = Math.max(...arrayOfObjTest.map(el => el.arr.length));
// Подготовить массив
const result = [];
// Заполнить каждую из строк i-ми элементами
for (let i = 0; i < maxLength; i++) {
result[i] = arrayOfObjTest.map(el => el.arr[i] || 0);
}
length
– количество элементов массива:[]; // сколько элементов? – 0
['a']; // сколько элементов: 1
['a', 'b', 'c'] // 3
X
.X
прибавляют i * size
байт. Самый первый элемент начинается сразу с адреса X
. Его индекс 0
."abcd"[1] // "b"
"abcd"[3] // "d"
Представьте, что в начале строки стоит курсор. Курсор возвращает букву перед которой стоит. Индекс – на сколько вправо надо этот курсор подвинуть.[a; b)
– например, в методе массива slice()
, который вырезает кусок массива, если указать slice(1, 5)
— вытащит элементы с индексами 1, 2, 3, 4
– включая 1-й, но не доходя до 5. const btnClassName = "btn_refresh";
document.querySelectorAll('.woosb-products').forEach(n => {
n.insertAdjacentHTML('afterend', `<button class="${btnClassName}">обновить</button>`);
});
document.addEventListener('click', (event) => {
if (event.target.classList.contains(btnClassName)) {
window.location.reload();
}
});
const product = document.querySelector('.woosb-products');
if (product) {
const button = document.createElement('button');
button.id = 'b_epr';
button.innerText = 'обновить';
button.addEventListener('click', () => window.location.reload());
product.insertAdjacentElement('afterend', button);
}
Plugin
. Как вам вариант:{ // обернуть, чтобы не засорять глобальную область
// внутри любая анархия, переменные
// исходный вариант 1
const Plugin = {
param1: 1,
param2: 1,
method1(){
//
},
method2(){
//
}
};
window.Plugin = Plugin;
}
docker.ping()
видимо, возвращает Promise. Надо дождаться его выполнения и только тогда возвращать ответ.const promises = endpoints.filter((i) => i.type === 1)
.map((i) => {
const result = {
id: i.id,
name: i.name,
type: i.type,
url: i.url,
groupId: i.groupId
};
const settings = (i.url.match('unix:///var/run/docker.sock')) ?
{socketPath: '/var/run/docker.sock'} : {host: i.url, port: 2375};
const docker = new Docker(settings);
return docker.ping().then(err => {
result.status = !err;
return result;
})
});
Promise.all(promises).then((results) => res.send(results));
const sliderOptions = {
arrows: true,
dots: false,
variableWidth: true,
centerMode: true,
slidesToShow: 8,
autoplay: true,
autoplaySpeed: 2000,
slidesToScroll: 3,
nextArrow: '<div class="tags__arrow tags__arrow_next">',
prevArrow: '<div class="tags__arrow tags__arrow_prev">',
appendArrows: $('.tags__arrows'),
}
const sliderSet = (is_on) => {
if (is_on) {
$('.tags__option_on').hide();
$('.tags__option_off').show();
$('.tags__inner').slick(sliderOptions);
} else {
$('.tags__option_on').show();
$('.tags__option_off').hide();
$('.tags__inner').slick('unslick');
}
}
$('.tags__option_on').on('click', () => sliderSet(true));
$('.tags__option_off').on('click', () => sliderSet(false));
sliderSet(false); // начальное состояние