все_квартиры = получаем список из базы данных
for (квартира of все_квартиры) {
залитая_на_сервер = POST запрос с jpg на сервер // или куда картинки сохранять?
квартира.картинка = залитая_на_сервер.jpg // обновляем адрес картинки в БД
}
(2 + 1) % 3 = 0
остаток от деления = 0, и переключаемся на "нулевую" картинку(1 + 1) % 3 = 2
то просто переключаемся на следующую, на "вторую" по индексуif (x >= 3) then x = 0
// stack overflow
function textNodesUnder(el){
var n, a=[], walk=document.createTreeWalker(el,NodeFilter.SHOW_TEXT,null,false);
while(n=walk.nextNode()) a.push(n);
return a;
}
// можно подставить и document.body
all = textNodesUnder( document.querySelector('div.question__body') )
all.forEach(txt => {
// сюда условный "перевод"
txt.textContent = `_ ${txt.textContent} _`
})
взять текстовые узлы сайта перевести их и вставить взамен старых. Переведенные узлы лежат в json
$('[data-toggle="tooltip"]').tooltip();
Chrome связал сохранение паролей с формой на конкретном сайте. В таком случае он полностью игнорирует атрибут autocomplete.
el.style.backgroundColor = colors[index % colors.length];
Второй вариант не работает, собирает слишком много ссылок
const url = [...document.querySelectorAll('script')]
.map(s => s.src)
.filter(src => src.includes('googletag'))[0]
// "http://www.googletagmanager.com/gtm.js?id=GTM-WZB..."
new URLSearchParams(new URL(url).search).get('id')
// "GTM-WZB..."
[...bla] = Array.from(bla)
, да это нужно чтобы был доступ к методам перебора массива