Cannot read property 'replaceChild' of null
console.log(document.parentNode) // выведет null
Каждая веб-страница, которая загружается в браузер, имеет свой собственный объект document. Интерфейс документа служит точкой входа для получения содержимого веб-страницы (всего DOM - дерева...)
// функция разбирает телефонный номер на части и возвращает их для проверки
function parsePhoneNumber(phoneNumberAsText){
// через парамерт phoneNumberAsText функция получает текст содержащий номер телефона
// предположим что обрабатываемое текстовое представление номера телефона
// может принимать следующий вид (и имеет принадлежность к РФ):
// "+7 (999) 888-77-55"
// "8 (999) 888-77-55"
// "+7 999 888-77-55"
// "+7999888-77-55"
// "+799988-777-55"
// "+799988-77-555"
// "+79998887755"
// "89998887755"
// и т.д.
// убираем из него все лишнее
var phone = "+"+phoneNumberAsText.replace(/^8/,"+7").replace(/[^0-9]/,"");
// составляем регулярку на основе международного формата телефонных номеров
var re = /^(\+\d)(\d{3})(\d{7})$/;
// получаем составные части нашего телефонного номера
var [phone, country, code, number] = phoneNumber.match(re);
// где:
// phone - номер телефона в формате "+79998887766"
// country - код страны (фикция, данный код будет работать для РФ и еще пары стран, поэтому считаем что тут всегда "+7")
// code - трехзначный код региона/оператора
// number - семизначный номер телефона в регионе/у оператора
// возвращаем полученный результат разбора номера
return {
phone: phone,
country: country,
code: code,
number: number
};
}
// парсим номер "8 (999) 888-77-66"
var result = parsePhoneNumber("8 (999) 888-77-66");
// на выходе в result получим объект вида
// { phone: "+79998887766", country: "+7", code: "999", number: "8887766" }
// предположим что у вас есть массив с нужными вам кодами регионов/операторов
// allowCodes = ["999", "998" и т.д];
// смотрим совпадает ли код региона/оператора с одним из кодов в allowCodes
if( allowCodes.indexOf(result.code) ){
console.log("Номер "+result.phone+" принадлежит искомой группе/региону/оператору")
}else{
console.log("Номер "+result.phone+" НЕ принадлежит искомой группе/региону/оператору")
}
fs.writeFile(fullPath, base64Image, { encoding: 'base64' }, err => {
if (err) return res.status(500).send(`Ошибка сохранения файла: ${err}`)
else return
});
const promise = new Promise(resolve, reject)=>{
fs.writeFile(fullPath, base64Image, { encoding: 'base64' }, err => {
if (!err) return resolve(true);
res.status(500).send(`Ошибка сохранения файла: ${err}`)
return reject(false);
});
});
const isWrite = await promise;
if(!isWrite) return;
slideIndex = (slideIndex + slides.length + n) % slides.length;
slideIndex = (slideIndex + n) % slides.length;
slideIndex = n % slides.length;
// Create global object class
let Obj = function ( name, power ) {
this.name = name;
this.power = this._power = power;
};
// Create character class
let Char = function ( name, power, weapon ) {
Obj.apply(this, arguments);
this.weapon = weapon;
this.x_power = power + weapon._power;
Object.defineProperty(this, "power", {
set: function(value) {
/* console.log("!!!!!") */
this._power = value;
this.x_power = this._power + this.weapon._power;
},
get: function(){
return this._power;
}
});
}
// Create weapon
let Club = new Obj("Дубина", 2 ); //
// Create character
//
let Player = new Char("Char", 1, Club);
console.log(Player.power); // Ожидаю получить 1 - Получаю!
console.log(Player.x_power); // Ожидаю получить 3 - Получаю!
Player.power = 5; // Изменяю power
console.log(Player.power); // Ожидаю получить 5 - Получаю!
console.log(Player.x_power); // Ожидаю получить 7 (как power + weapon.power), но мои ожидания не оправдываются: Получаю 3.
var text = "(text) Lorem Ipsum is simply dummy, (text, simply) and (text, simply, qwerty) typesetting industry. Lorem Ipsum has been the[/m]";
let result = text.match(/\([^)]+?(,[^)]+)+\)/g);
console.log(result); // [ "(text, simply)", "(text, simply, qwerty)" ]
const Authorized = require('../moduls/authorized')
const auth = new Authorized();
// так
router.get("path/",auth.isAuthorized.bind(auth));
// или так
router.get("path/",(...a)=>auth.isAuthorized(...a));
isAuthorized(){
return (req, res, next)=>{
console.log('isAuth',this)
// тут код мидлвара
}
}
router.get("path/",auth.isAuthorized());
// или
router.post("path/",auth.isAuthorized());
// или
router.use(auth.isAuthorized());
...
document.querySelector('#translate_btn').addEventListener('click', function(){
var word = document.getElementById("translate_form"); //поле ввода слова
// добавьте эти две строчки!!!!!
if( !word.value ) return;
url = 'https://translate.yandex.net/api/v1.5/tr.json/translate';
var langTranslate = document.querySelector('.lang_list');//выбор языка перевода
var translate = document.querySelector('.translate');//блок, куда вставляется перевод
var translate = document.querySelector('.translate');//блок, куда вставляется перевод
var req = new XMLHttpRequest();
...
...
function delay(func, timeOut) {
// при вызове delay(func, timeOut) мы создаем анонимную функцию и возвращаем ее
// но при этом внутри нее мы обращаемся к переданному параметру func
// создавая тем самым замыкание на него
return function() {
// внутри возвращаемой анонимной функции мы запускаем таймер
// которому передаем параметр func являющейся функцией, определенной
// где то вовне этот таймер выполнит func но при этом внутри самой func
// уже будет не видны параметры переданные для анонимной функции.
// Внутри анонимной функции эти параметры можно получить через arguments.
// Тля того, чтобы func могла получить к ним доступ, мы используем apply,
// привязывая к func контент вызова анонимной функции и ее arguments
// тем самым создавая замыкания к this и arguments анонимной функции
setTimeout(func.apply(this, arguments), timeOut);
// как правильно подсказал @bingo347, эту строчку надо немного переписать
setTimeout(func.bind(this, ...arguments), timeOut);
}
}
// примерно того же эффекта можно было добиться следующим кодом
function delay(func, timeOut) {
return function(text) {
setTimeout(()=>func(text), timeOut);
}
}
// можно даже добиться не примерно такого, а точно такого же эффекта
// (за исключением привязки контекста анонимной функции через this
// который влияет лишь на возможность обратится непосредственно
// к методам и свойствам самой анонимной функции, которых в вашем
// примере не объявлено )))
function delay(func, timeOut) {
return function(...args) {
setTimeout(()=>func(...args), timeOut);
}
}
...
function f(argument1, argument2) {
alert(argument1 + " " + argument2);
}
let f1000 = delay(f, 1000);
f1000("1111", "2222"); // показывает "1111 2222" после 1000 мс
function f(argument1, argument2, argument3) {
alert(argument1 + " " + argument2 + " " + argument3);
}
let f1000 = delay(f, 1000);
f1000("1111", "2222", "3333"); // показывает "1111 2222 3333" после 1000 мс