// Шаг 1: Создаём запрос серверу
let response = await fetch('https://api.github.com/repos/javascript-tutorial/en.javascript.info/commits?per_page=100');
const reader = response.body.getReader();
// Шаг 2: получаем размер контента/файла
const contentLength = +response.headers.get('Content-Length');
// Шаг 3: читаем данные
let receivedLength = 0; // данных получено (байт)
let chunks = []; // массив кусочков файла
while(true) {
const {done, value} = await reader.read();
if (done) {
break;
}
chunks.push(value);
receivedLength += value.length;
console.log(`Получено ${receivedLength} байт из ${contentLength} байт`)
}
// Шаг 4: соединяем кусочки в единный Uint8Array
let chunksAll = new Uint8Array(receivedLength); // (4.1)
let position = 0;
for(let chunk of chunks) {
chunksAll.set(chunk, position); // (4.2)
position += chunk.length;
}
// Шаг 5: декодируем в нужный формат
let result = new TextDecoder("utf-8").decode(chunksAll);
// Готово!
let commits = JSON.parse(result);
alert(commits[0].author.login);
<div class="good-list">
<!-- * * * другие товары * * * -->
<div class="good-item">
<!-- * * * инфа по товару * * * -->
<input class="good-id" type="hidden" value="345736">
<button class="add">add</button>
</div>
<!-- * * * другие товары * * * -->
</div>
[...document.querySelectorAll('.good-list > .good-item > button.add')].forEach(btn => {
btn.addEventListener('click', e => {
let thisBtn = e.target; // Кнопка, которую нажали
let thisGood = thisBtn.closest('.good-item'); // div со всей информацией товара
let thisHiddenInput = thisGood.querySelector('.good-id'); // скрытый input с id товара
let thisID =parseInt( thisHiddenInput.getAttribute('value') ); // сам id товара
console.log(thisID);
});
});
/* Прокрутка вверх-вниз при зажатой любой кнопке мыши */
let active = false;
window.onmousedown = (e)=> { active = true; stop(e); };
window.onmouseup = (e)=> { active = false; stop(e); }
window.onmousemove = (e) => {
if(active){
document.documentElement.scrollTop-=e.movementY;
}
}
/* Это остановит появление контекстного меню по правой кнопке мыши */
window.oncontextmenu =(e)=>stop(e);
function stop(e){
e.preventDefault();
e.stopPropagation();
}
":checked".
И еще у вас каждый radio-элемент имеет своё имя - это неправильно, у радио-элементов должно быть одинаковое значение атрибута name=""
, но разное значение атрибута id=""
. И Если необходимо отправлять эти данные на сервер, вам необходимо обернуть все это хозяйство в тег <FORM>
. let date1 = new Date("2020-07-30T07:09:58.999+0300");
let date2 = new Date("2020-07-30T07:09:58.998+0300");
console.log(date1>date2); // => true
console.log(date1<date2); // => false
let date1 = new Date("2020-07-30T07:09:58.999+0300");
let date2 = new Date("2020-07-30T07:09:58.998+0300");
console.log(date1.getTime()>date2.getTime()); // => true
console.log(date1.getTime()<date2.getTime()); // => false
new Date("2020-07-30T07:09:58.999+0300");
2020 - год
07 - месяц (июль)
30 - число
07 - часов
09 - минут
58 - секунд
998 - милисекунд
+0300 - часовой пояс (МСК +3:00)
console.log((new Date("2020-07-30T07:09:58.999+0300")).getTime())
// => 1596082198999
let str1 = "2020-07-30T07:09:58.999+0300";
let str2 = "2020-07-30T07:09:58.998+0300";
console.log(str1>str2); // => true
console.log(str1<str2); // => false
e.preventDefault()
у события 'touchstart'
.e.preventDefault()
с событиями 'touchmove'
и 'gesturechange'