cmd + F2
(на маке) выделит все включения текущего слова. Мульти-курсор, можно заменить или допечатать/удалить часть – везде и сразу ©cmd + shift + P
и начать печатать "Emmet: Balance (inward)" – и выбрать командуswitch (Model[i].Type) {
case EventType.Call:
className = 'my-class-call';
break;
case EventType.Meeting:
className = 'my-class-meeting';
break;
// ...
}
<a class="@className" id="user-event-@i" href="@Url.Action("Details", "Event", new { @id = @Model[i].Id })">
<div style="width: 100%; min-height: 110px; border-top: 2px solid #CFCED1; border-left: 1px solid #CFCED1; border-right: 1px solid #CFCED1; background-color: @backgroundColor; cursor: pointer;">
</div>
</a>
.my-class-call { ... }
.my-class-call:hover { ... }
.my-class-meeting { ... }
.my-class-meeting:hover { ... }
src
загрузят картинку один единственный раз и покажут в трёх местах.src
загрузят три разные картинки. HTTP/1.1
, то 3 картинки это 3 разных запроса. Для каждого устанавливается новое соединение. Скачивание идёт параллельно.HTTP/2
, то соединение одно, и 3 запроса выстроятся последовательно. Экономия на установлении новых соединений.HTTP/2
должен быть быстрее за счёт экономии на времени установления новых соединений.name
Например<input type="text" name="first_name" placeholder="First name">
<select name="day_of_week">
<option value="1">Monday</option>
<option value="2">Tuesday</option>
<option value="3">Wednesday</option>
</select>
<?php
$filename = 'form_responses.txt';
if (!empty($_POST)) {
$record = [
// перечисляются поля формы
'first_name' => filter_input(INPUT_POST, 'first_name', FILTER_SANITIZE_STRING),
'day_of_week' => filter_input(INPUT_POST, 'day_of_week', FILTER_SANITIZE_NUMBER_INT),
];
$recordString = implode('; ', $record) . PHP_EOL; // склеить значения через точку с запятой
file_put_contents($filename, $recordString, FILE_APPEND);
}
event.target
– это кликнутый элемент.document.addEventListener('click', ({ target }) => {
if (!target.classList.contains('button')) return; // не тот клик
target.classList.toggle('active');
});
ctx
традиционно обозначают не элемент canvas, а взятый из него context (который бывает 2d
, webgl
и др. ctx.width = 100;
ctx.height = 100;
$options = [
[null, $_LNG['TYPE_ORDER']],
['select_all', $_LNG['ALL_TYPES']],
['select_domain', $_LNG['DOMAIN']],
['select_server', $_LNG['SERVER']],
['select_ssl', $_LNG['SSL']],
['select_desing', $_LNG['DESING']],
['select_script', $_LNG['SCRIPT']],
['select_layout', $_LNG['LAYOUT']],
['select_adv', $_LNG['ADV']],
['select_seo', $_LNG['SEO']],
];
printf('const options = %s;', json_encode($options));
options
полноценный элемент select
со всеми опциями: createSelect = () => {
const select = document.createElement('select');
options.forEach(([value, title]) => {
const option = document.createElement('option');
option.innerText = title;
if (value) {
option.value = value;
} else {
option.setAttribute('disabled', true);
option.setAttribute('selected', true);
}
select.appendChild(option);
});
return select;
};
08:40
. В этот момент можно выбросить событие. Считайте, что «Событие» == «Звонок».08:39
стало 08:40
– предыдущее значение ещё-не, а текущее уже-да. Вот тогда и выбрасывать событие.setTimeout()
на нужные количества миллисекунд. const sourceElement = document.querySelector('.GrandMuther');
// во что заворачивать
const wrapper = document.createElement('div');
wrapper.classList.add('Mother');
Array.from(sourceElement.children)
.forEach(el => wrapper.appendChild(el));
sourceElement.appendChild(wrapper);
element.hasAttribute('maxlength')
element.setAttribute('maxlength', 20)
document.querySelectorAll('input[type=password]')
forEach()
maxlength
;