function ask(question, ...handlers) {}
ask("Как жизнь?", function(){}, 1, 22, "zzz");
// в функцию ask попадёт:
// question = "Как жизнь?";
// handlers = [
// function(){},
// 1,
// 22,
// "zzz"
// ];
Аргументы после первого все попадают в массив handlers. $.get( "file.txt", function( data ) {
window.fileTxtContent = data;
});
и теперь уже станет «можно» и глобально с ним работать. Но на этот момент весь «обычный» код уже давно отработал.function workWithFileTxt(content) {
console.log("Я свободен от jQuery! А вот текст из файла: ", content);
}
$.get( "file.txt", workWithFileTxt);
getElementsByClassName()
, ..byName()
, ..byTagName()
— возвращают «живую» коллекцию. Когда удаляете 0-й элемент, остальные тут же сдвигаются и бывший 1-м, становится 0-м, но его цикл уже не будет удалять. Теперь к удалению 1-й (бывший 2-й) — поэтому удаляются через один. for (let i = li.length - 1; i >= 0; i--) {
[...menu[1].getElementsByClassName("main-menu__item")]
document.querySelectorAll('.main-menu')[1].remove()
Так по-прежнему в переменнуюlet randomIndex = Math.floor(Math.random() * alphabet.length);
randomIndex
записывается случайный индекс. Один раз.const getRandomIndex = () => Math.floor(Math.random() * alphabet.length);
А вот функция, которая при каждом вызове getRandomIndex()
будет возвращать новый случайный индекс. sqrt( 0.299*R^2 + 0.587*G^2 + 0.114*B^2 )
Это никогда не будет точным значением, но для задачи подойдёт.for (let i = 0; ...
перебирает, условно, горизонтали (строки).for (let k = 0; ...
составляет очередную строку из клеточек, перебирает 8 клеток.s
, которая бывает или 1 или 0, означает цвет очередной клетки, и на каждой клетке меняет своё значение.0 1 0
1 0 1
0 1 0
размотать:
0 1 0 1 0 1 0 1 0
Как видно, клетки меняют свой цвет всегда, в том числе при переходе к следующей строке. appendChild()
, добавленные пользователем в начало prepend()
unShift()
, полученные с сервера push()
. Для сохранения на сервер отправлять весь массив. function storageAvailable(type) {
var storage;
try {
storage = window[type];
var x = '__storage_test__';
storage.setItem(x, x);
storage.removeItem(x);
return true;
}
catch(e) {
return e instanceof DOMException && (
// everything except Firefox
e.code === 22 ||
// Firefox
e.code === 1014 ||
// test name field too, because code might not be present
// everything except Firefox
e.name === 'QuotaExceededError' ||
// Firefox
e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
// acknowledge QuotaExceededError only if there's something already stored
(storage && storage.length !== 0);
}
}
if (storageAvailable('localStorage')) {
// Yippee! We can use localStorage awesomeness
}
else {
// Too bad, no localStorage for us
}
const timerKey = 'myTimer';
function onButtonClick() {
const D = new Date();
D.setTime(45 * 6e4 + D.getTime()); // добавить 45 минут
localStorage.setItem(timerKey, D.getTime()); // сохранить на случай обновления страницы
startTimer(D.getTime()); // показывать обратный отсчёт
}
document.getElementById("id1").addEventListener("click", onButtonClick);
function startTimer(ts) {
function showTime() {
const till = Math.max(0, che - Date.now()); // не меньше 0
// далее вывод этого времени в нужном месте
let seconds = Math.floor(till / 1000);
const hours = Math.floor(seconds / 3600);
seconds -= hours * 3600;
// ...
if (till > 0) setTimeout(showTime, 200);
}
const che = +ts; // чтобы число
showTime();
const savedChe = +localStorage.getItem(timerKey);
if (savedChe) startTimer(savedChe);
Есть скрипт который нужно после события click загружать заново.
var message = "Привет Хабр";
alert(message);
А вы сделайте так:function my_func() {
var message = "Привет Хабр";
alert(message);
}
и в коде страницы:<button id="btn">нажми</button>
<script src="my_script.js"></script>
<script>
document.addEvenListener('load', my_func); // при загрузке страницы выполнить
document.getElementById('btn').addEventListener('click', my_func); // и при нажатии кнопки
</script>