return *head->...
должно быть return head->...
. SELECT *
FROM table
WHERE (SELECT array_agg((t->>'category_id')::INT) FROM jsonb_array_elements(data->'items') AS t) && ARRAY[1,3,5]
SELECT *
FROM table
WHERE ARRAY(SELECT t.category_id FROM jsonb_to_recordset(data->'items') AS t(category_id INT)) && ARRAY[1,3,5]
options: {
scales: {
xAxes: [ {
ticks: {
fontFamily: 'Impact, Charcoal, sans-serif'
}
} ]
}
}
const selector = '[id^="oOR"]';
const clickCount = 100;
$(selector).slice(0, clickCount).click();
// или
[...document.querySelectorAll(selector)].slice(0, clickCount).forEach(n => n.click());
из-за "одновременного" клика все виснет
Может подскажете конструкцию с .delay() (или чем то аналогичным)
function chunkedAndDelayed(data, delay, chunkSize, onChunk) {
const getChunk = (data.slice || Array.prototype.slice).bind(data);
(function nextChunk(i) {
if (i < data.length) {
onChunk(getChunk(i, i + chunkSize));
setTimeout(nextChunk, delay, i + chunkSize);
}
})(0);
}
const delay = 500;
const clickChunkSize = 5;
chunkedAndDelayed(
$(`${selector}:lt(${clickCount})`),
delay,
clickChunkSize,
$elems => $elems.click()
);
// или
chunkedAndDelayed(
Array.prototype.slice.call(document.querySelectorAll(selector), 0, clickCount),
delay,
clickChunkSize,
elems => elems.forEach(n => n.click())
);
<a href="https://toster.ru" onclick="return false">link</a>
a.disabled {
pointer-events: none;
}
<a href="https://toster.ru" class="disabled">link</a>
[
'https://toster.ru/foto/cool/432rejfio23.jpg',
'https://toster.ru/foto/f923jiwe.gif',
'https://toster.ru/foto/new/1423.png',
'https://toster.ru/foto/123a.jpg'
].map(function(n) {
const [ , path, file ] = /(.+\/)([^\/]+)$/.exec(n);
return { file, path };
});
[
'https://toster.ru/foto/cool/432rejfio23.jpg',
'https://toster.ru/foto/f923jiwe.gif',
'https://toster.ru/foto/new/1423.png',
'https://toster.ru/foto/123a.jpg'
].map(function(n) {
const lastSlash = n.lastIndexOf('/') + 1;
return {
file: n.slice(lastSlash),
path: n.slice(0, lastSlash)
};
});
<select id="country"></select>
<select id="сity"></select>
<p></p>
const data = {
'Франция': [ 'Париж', 'Марсель', 'Лион' ],
'США': [ 'Вашингтон', 'Чикаго', 'Фарго' ],
'Италия': [ 'Рим', 'Милан', 'Неаполь' ],
};
const country = document.querySelector('#country');
const city = document.querySelector('#сity');
const p = document.querySelector('p');
country.addEventListener('change', e => {
setSelectOptions(city, data[e.target.value]);
});
city.addEventListener('change', () => {
p.innerText = [ country.value, city.value ].join(', ');
});
setSelectOptions(country, Object.keys(data));
function setSelectOptions(selectEl, optionsData) {
selectEl.innerHTML = optionsData.map(n => `<option>${n}</option>`).join('');
selectEl.dispatchEvent(new Event('change'));
}
const cardSelector = '.post';
const buttonSelector = '.post > img';
const menuSelector = '.post-info';
const activeClass = 'active';
document.addEventListener('click', ({ target: t }) => {
if (!t.closest(menuSelector)) {
document.querySelectorAll(menuSelector).forEach(n => n.classList.remove(activeClass));
}
if (t.matches(buttonSelector)) {
t.closest(cardSelector).querySelector(menuSelector).classList.add(activeClass);
}
});
goal-check
выставляется и тут же снимается..goal
и .delete
надо вешать один раз, применяя делегирование:$('.todo-task').on('click', '.delete', function() {
$(this).parent().remove();
});
$('.todo-task').on('click', '.goal', function() {
$(this).toggleClass('goal-check');
});
array_map(function($n) {
return [ "url" => "/site/$n[0]", "label" => $n[1] ];
}, [
[1, 'Главная'],
[2, 'Портфолио'],
[3, 'О нас']
]);
SELECT u.*, COALESCE(v.v_sum, 0) AS total_views
FROM users u
LEFT JOIN (
SELECT f.entity_id, SUM(f.views) AS v_sum
FROM feeds f
GROUP BY f.entity_id
) AS v ON v.entity_id = u.id
ORDER BY v.v_sum DESC
const selector = '.tr-class input[type="checkbox"]';
document.querySelectorAll(selector).forEach(function(n) {
n.addEventListener('click', this);
}, e => e.stopPropagation());
for (const n of document.querySelectorAll('.tr-class')) {
n.addEventListener('click', onClick);
}
function onClick(e) {
if (e.target.matches(selector)) {
return;
}
// ...
}
function getRecursiveStr($arr) {
$result = [];
foreach ($arr as $key => $val) {
if (is_array($val)) {
array_push($result, $key, getRecursiveStr($val));
} else {
$result[] = $val;
}
}
return implode(', ', $result);
}
$arr = [
"Один" => [
"Два" => [
"2.87" => [
"2.88",
"2.89"
],
"Три" => [
"Три с половиной",
"Четыре"
]
]
]
];
echo getRecursiveStr($arr); // выведет "Один, Два, 2.87, 2.88, 2.89, Три, Три с половиной, Четыре"