.colorAdd()
, чтобы вызывать так, как вы написали. Вместо elem.colorAdd();
colorAdd.apply(elem);
colorAdd()
, назначив её контекстом (значением this
) переданный первым параметром elem
и всё сработает так, как вы задумали. Фиддл. const delay = _ => new Promise(rs => setTimeout(rs, 3e3));
async function notSoFast(promise) {
result = await Promise.all([ promise, delay()]);
return result[0];
}
async function runPromisesInSequence(promises) {
for (let i=0; i<promises.length; i++) {
if(i === 0) {
console.timeEnd( await promises[0]);
} else {
console.timeEnd( await notSoFast(promises[i]));
}
}
}
function makePr(label, dur) {
return new Promise(rs => {
console.log('%s started', label);
console.time(label); // начало отсчёта
setTimeout(_ => {
console.log('%s timer completed', label);
rs(label);
}, dur);
});
}
runPromisesInSequence([
makePr('r1', 1000),
makePr('r2', 5000),
makePr('r3', 0000),
]);
/* Выводит:
r1 started
r2 started
r3 started
r3 timer completed
r1 timer completed
r1: 1005ms
r2 timer completed
r2: 5007ms
r3: 8009ms
*/
function replacer(el){
var i, node, span;
if(el.hasChildNodes()) {
for(i=0; i<el.childNodes.length; i++) {
node = el.childNodes[i];
if(node.nodeType === Node.ELEMENT_NODE) {
if( !!~['SCRIPT','NOSCRIPT'].indexOf(node.nodeName)) continue;
replacer(node);
} else if( node.nodeType === Node.TEXT_NODE) {
if(node.nodeValue.match(/^\s+$/)) continue;
span = document.createElement("span");
span.innerHTML = node.nodeValue.replace(/([а-яА-Я]+)/ug, '<i>$1</i>');
el.insertBefore(span, node);
el.removeChild(node);
}
}
}
}
replacer(document.body);
<span>
, чтобы просто innerHTML ему заменить.const dGet = document.getElementById.bind(document);
const reSpace = /\s+/;
const div = dGet('text');
const text = div.innerText;
const words = text.trim().split(reSpace);
dGet('text_input').addEventListener('input', function(e){
var i, myWords = e.target.value.trim().split(reSpace),
theWords = words.slice();
var toCheck = e.target.value.substr(-1) === ' ';
if(!toCheck) myWords.length--;
for(i=0; i<Math.min(myWords.length, words.length); i++) {
if(words[i] !== myWords[i]) {
theWords[i] = '<i>' + words[i] + '</i>';
} else {
theWords[i] = '<b>' + words[i] + '</b>';
}
}
div.innerHTML = theWords.join(' ');
});
const STATE_SELECT = 1;
const STATE_CHECK = 2;
var state = STATE_SELECT;
var rrr = function() {
if(state === STATE_CHECK) return;
$(this).toggleClass("red");
};
var ggg = function() {
if(state === STATE_CHECK) return;
$(this).toggleClass("green");
};
var yyy = function() {
$(".green").toggleClass("yellow");
if(state === STATE_CHECK) {
state = STATE_SELECT;
} else {
state = STATE_CHECK;
}
};
$("div").hover(rrr);
$("div").click(ggg);
$("button").click(yyy);
function start() {
и закрывающую }
в конце : )</body></html>
var player = {x:200, y:200, el:document.getElementById('player')};
player.el.style.left = '' + Math.round(player.x) + 'px';
player.el.style.top = '' + Math.round(player.y) + 'px';
var delta = {x:0, y:0};
document.addEventListener('keydown', function(e){
if( e.key == 'ArrowRight') delta.x = 1;
else if(e.key == 'ArrowLeft') delta.x = -1;
else if(e.key == 'ArrowUp') delta.y = -1;
else if(e.key == 'ArrowDown') delta.y = 1;
});
document.addEventListener('keyup', function(e){
if( e.key == 'ArrowRight') delta.x = 0;
else if(e.key == 'ArrowLeft') delta.x = 0;
else if(e.key == 'ArrowUp') delta.y = 0;
else if(e.key == 'ArrowDown') delta.y = 0;
});
var ts = null;
function step(timestamp) {
if(!ts) ts = timestamp;
var passed = timestamp - ts;
//if(passed < 200) return window.requestAnimationFrame(step);
ts = timestamp;
if(delta.x || delta.y) {
player.x += delta.x * passed / 10;
player.y += delta.y * passed / 10;
player.el.style.left = '' + Math.round(player.x) + 'px';
player.el.style.top = '' + Math.round(player.y) + 'px';
};
window.requestAnimationFrame(step);
}
window.requestAnimationFrame(step);
<script type="template" id="sourceCode">
. Скриптом копировать её оттуда, применять изменения и вставлять в DOM. При изменении размера, снова доставать нетронутую исходную разметку и переделывать под другую ширину. $('body').on('beforeSubmit', 'form', function(){
<body>
. С закрытием модального окна он не исчезает и слушатель, повешенный на него, остаётся. .on(...)
заменить на .one(...)
– это костыль, т.к. если форму не отправят, а только закроют модалку, в следующий раз отправится дважды.num
увеличивается на 1.for{ ... }
достаточно num = arr.length;
или вообще всю функцию function func() {
var num = this.value.split(' ').length;
document.getElementById('result').innerHTML = num;
}
function func() {
var num = this.value.trim().split(/\s+/).length;
document.getElementById('result').innerHTML = num;
}
Ассоциативность определяет порядок, в котором обрабатываются операторы с одинаковым приоритетом. Например, рассмотрим выражение:a OP b OP c
Левая ассоциативность (слева-направо) означает, что оно обрабатывается как (a OP b) OP c, в то время как правая ассоциативность (справа-налево) означает, что они интерпретируются как a OP (b OP c). Операторы присваивания являются право-ассоциативными, так что вы можете написать:a = b = 5;
с ожидаемым результатом, что a и b будут равны 5. Это происходит, потому что оператор присваивания возвращает тот результат, который присваивает. Сначала b становится равным 5, затем a принимает значение b.
function toMatrix(arr) {
const len = arr.length;
const side = Math.ceil( Math.sqrt(len));
if( side * side - len !== 1) throw "Bad array length";
let result = [], index;
for(let row = 0; row < side; row++) {
result.push([]);
let currentRow = result[result.length - 1];
for(let col = 0; col < side; col++) {
index = side * row + col;
if(index > len) break;
if(index === len) {
currentRow.push(0);
} else {
currentRow.push(arr[index]);
}
}
}
return result;
}
toMatrix([1,2,5]) // [[1,2],[5,0]]
toMatrix([1,2,3,4,5,6,7,8]) // [[1,2,3],[4,5,6],[7,8,0]]
function toMatrix(arr) {
const len = arr.length;
const side = Math.ceil( Math.sqrt(len));
if( side * side - len !== 1) throw "Bad array length";
let result = [];
for(let row = 0; row < side; row++) {
result.push( arr.slice(side * row, side * (row+1))); // выкусываем подряд строку, side элементов
}
result[side - 1].push(0); // в последниюю строку дописываем 0
return result;
}
toMatrix([1,2,5]) // [[1,2],[5,0]]
toMatrix([1,2,3,4,5,6,7,8]) // [[1,2,3],[4,5,6],[7,8,0]]
значение_поля_внутреннего_объекта: ключ_внешнего_объекта
var house = {}; // внешний объект
var names = {}; // доп. словарь для поиска
function add(num, flat) {
house[num] = flat; // добавили внутренний объект
names[flat.name] = num; // запись для поиска в словарь
}
add(11, {name:"Vasya", phone:"555-111", area:111, price:1111});
add(22, {name:"Lena", phone:"555-222", area:222, price:2222});
names["Lena"] // 22
function get(name) {
return house[ names[name]];
}
get("Lena") // {name:"Lena", phone:"555-222", area:222, price:2222}
значение_поля: сам_внутренний_объект
var myEvent = new Event('teaTime');
Остается положить конверт на нужный столик: document.getElementById('stolik').dispatchEvent(myEvent);
var event = new CustomEvent('saySomething', { detail: "Hello there!" });
results
.data.results.forEach( film => {