tasks.push(data); // тут вставили очередной элемент
let task_index = tasks.length - 1; // узнаем его индекс по длине массива, так как он в текущей ситуации последний
// несколько строк спустя
b1.addEventListener("click",
(function(inner_task_index) // функция-обертка для изоляции контекста, сюда передается значение task_index, я специально выделил его другим именем inner_task_index, чтобы видеть контекст функции-обертки
{
// обертка возвращает функцию-обработчик события для addEventListener
return function delFromLocalSt() {
task.removeChild(li);
let array = JSON.parse(localStorage.getItem('task'));
array.splice(inner_task_index, 1); // удаляем элемент по известному индексу используя механизм замыкания, используя контекст функции обертки
localStorage.setItem('task', JSON.stringify(array));
}
})(task_index) // вызываем хитрую обертку, чтобы обеспечить изоляцию переменной от контекста функции createEl
);
let elem_count = elems.length;
for(let i = 0; i < elem_count; i++)
{
let elem = elems[i];
// что-то сделать с elem
}
let elem = document.querySelector('.elem'); // Берем нужный контейнер
elem.addEventListener('click' , function(e) // вешаем обработчик только на elem, за счет всплытия события, обработчик будет срабатывать на всех дочерних элементах
{
alert('k');
});
document.addEventListener('click' , function(e)
{
let elem = document.querySelector('.elem');
if( e.target == elem // кликнули на сам контейнер elem
|| e.target.tagName == 'SPAN' && e.target.parentNode == elem // или кликнули на какой-то элемент span, непосредственный родитель которого есть наш контейнер elem
)
{
alert('k');
}
})
for( let post of _data)
{
let body = post.body;
// что-то сделать с body
for(let block of body.blocks)
{
// что-то сделать с block
for(let curr_data of block.data)
{
// что-то сделать с data в block
}
// что-то сделать с block
}
// что-то сделать с body
}
class DeviceController {
getItems = async (query) => {
let { brandId, typeId, limit, page, } = req.query
page = page || 1
limit = limit || 9
let offset = page * limit - limit
let devices;
if (!brandId && !typeId) {
devices = await Product.findAndCountAll({ limit, offset })
}
return devices
};
getAllForClient = async (req,res) => {
let newList=[]
let devices=await this.getItems(req.query)
for (let index = 0; index < devices.length; index++) {
let newItem={
name:devices[index].name,
price:devices[index].price,
videoUrl:devices[idnex].videourl
}
newList.push(newItem)
}
return res.json(newList)
}
}
var container = document.getElementById('какой-то-id-контейнера-куда-вывести');
container.innerHTML = "<p style='text-align: center'>User info:</p>\
<table>\
<tr><td>Name:</td><td>" + response.name + "</td></tr>\
<tr><td>Username:</td><td>" + response.username + "</td></tr>\
<tr><td>Address:</td><td>" + response.address.city + ", " + response.address.street + "</td></tr>\
<!-- И дальше в таком же духе -->\
</table>";
полоски прогресса и таймера в отдельный поток?
document.styleSheets[i].rules[j].selectorText
document.styleSheets[i].rules[j].style['имя_свойства'] = значение_свойства;
viewsHandler(elementClass){
let data = this.data.htmlBlocks[elementClass].views;
let now = new Date().getTime();
if ( data.lastView && now - data.lastView / 1000 > 15 ) {
data.views = views.count++; // views который справа за пределами функции?
data.lastView = now;
}
} else {
data.views = 2;
data.lastView = 1;
}
}
}
Выделите ошибку и нажмите одновременно клавиши «Ctrl» и «Enter»
btn_send.addEventListener('click',async() => {
let blob = await new Promise(resolve => canvasElem.toBlob(resolve, 'image/png'));
let formData = new FormData(); // Создаем объект формы для наполнения данными, словно мы работаем с тегом form в html.
formData.append('canvas_field', blob, 'canvas.png'); // это эквивалент тому, что в нашей html форме создаем поле input type="file" name="canvas_field" value="canvas.png" и прикрепляем туда содержимое blob (метод append сам расшаривает blob, дополнительных преобразований не требуется). Естественно, на DOM-дереве это никак не отразится, это модель формы в памяти JS.
let response = await fetch('web_tp_word.php', {
method: 'POST',
body: formData // для fetch не нужно дополнительных параметров, чтобы объяснить как работать с formData. Идеально, чтобы завернуть файл в форму и отправить на сервер.
});
});
var_dump($_FILES['canvas_field']); // Сервер при вызове скрипта сложит данные файла во временный файл, а как их получить - в $_FILES. Далее можно обрабатывать всеми теми способами, предназначенные для работы с $_FILES. И после уже неважно, как их сгенерировали на клиенте.
...args
arguments
какая из реализаций лучше?
<select id="selectTheme" onchange="alert('Theme changed')">
</select>
sel.addEventListener('change', (event) => {
alert('Theme changed');
})