Как сделать, чтобы отображался реальный IP клиента?
@scope (<scope-start>) to (<scope-end>)
, объявления внутрь scope-end
не просачиваются, но если свойство наследуемое (как color) то оно тоже вполне себе наследуется как ему и положено DIV.box
не существует в указанной разметке, но существует div#box
onclick="select('div#box', 'div.a')"
select()
пишется элементарно:function select(where, what) {
for (const node of document.querySelectorAll(`${where} > :not(${what})`)) {
node.setAttribute('aria-hidden', 'true');
// то, что подразумевается под "скрывал"
}
for (const node of document.querySelectorAll(`${where} > ${what}`)) {
node.removeAttribute('aria-hidden');
// обратное тому, что подразумевается под "скрывал"
}
}
with (this) { ... }
, а у <input>
есть свой select():Где ошибка?
$('body').click(function(event) {
if(!$(event.target).is('.li-tooltip span') && !$(event.target).is('.li-tooltip input')) {
- $('.li-tooltip input').checked = 'false';
+ $('.li-tooltip input').prop('checked', false);
- $('.li-tooltip span').hide();
}
});
- $('.li-tooltip input').on('click', function () {
- $(this).parents().children('span').toggle();
- })
или  
, то они меняются отдельно columns: 2;
на контейнер и break-inside: avoid;
на элементы, но порядок элементов будет другой <?php
$arr = [ 'id' => 1, 'name' => 'item1', 'items' => [
[ 'id' => 2, 'name' => 'item2', 'items' => [], ],
[ 'id' => 3, 'name' => 'item3', 'items' => [], ],
[ 'id' => 4, 'name' => 'item4', 'items' => [
[ 'id' => 5, 'name' => 'item5', 'items' => [], ],
[ 'id' => 6, 'name' => 'item6', 'items' => [], ],
], ],
], ];
function list_form_iterative(array $input) {
$result = [ '<ul>', ];
$state = [ [ 'array' => $input, 'keys' => array_keys($input), 'idx' => 0, ] ];
for (; count($state) > 1 || $state[0]['idx'] < count($state[0]['keys']); $state[0]['idx'] += 1) {
if (count($state) > 1 && $state[0]['idx'] === count($state[0]['keys'])) {
array_shift($state);
continue;
}
$key = $state[0]['keys'][$state[0]['idx']];
$value = $state[0]['array'][$key];
if (!is_array($value)) {
$result[] = "<li>$key => $value</li>";
}
else {
$result[] = "<li>$key => []</li>";
if (!count($value)) continue;
array_unshift($state, [ 'array' => $value, 'keys' => array_keys($value), 'idx' => -1, ]);
}
}
$result[] = '</ul>';
return implode("\n", $result);
}
echo list_form_iterative($arr);
<?php
$arr = [ 'id' => 1, 'name' => 'item1', 'items' => [
[ 'id' => 2, 'name' => 'item2', 'items' => [], ],
[ 'id' => 3, 'name' => 'item3', 'items' => [], ],
[ 'id' => 4, 'name' => 'item4', 'items' => [
[ 'id' => 5, 'name' => 'item5', 'items' => [], ],
[ 'id' => 6, 'name' => 'item6', 'items' => [], ],
], ],
], ];
function list_form_recursive(array $input) {
static $level = 0;
$self = __FUNCTION__;
$result = [];
if (!$level) {
$result[] = '<ul>';
}
foreach ($input as $key => $value) {
if (!is_array($value)) {
$result[] = "<li>$key => $value</li>";
}
else {
$result[] = "<li>$key => []</li>";
if (!count($value)) continue;
$level += 1;
array_push($result, ...$self($value));
$level -= 1;
}
}
if (!$level) {
$result[] = '</ul>';
return implode("\n", $result);
}
else {
return $result;
}
}
echo list_form_recursive($arr);
<ul>
<li>id => 1</li>
<li>name => item1</li>
<li>items => []</li>
<li>0 => []</li>
<li>id => 2</li>
<li>name => item2</li>
<li>items => []</li>
<li>1 => []</li>
<li>id => 3</li>
<li>name => item3</li>
<li>items => []</li>
<li>2 => []</li>
<li>id => 4</li>
<li>name => item4</li>
<li>items => []</li>
<li>0 => []</li>
<li>id => 5</li>
<li>name => item5</li>
<li>items => []</li>
<li>1 => []</li>
<li>id => 6</li>
<li>name => item6</li>
<li>items => []</li>
</ul>
const as = (where, what) => what.filter(v => where.includes(v)).length;
what
, один только Array.filter()
не даст количества вхождений в where
букв из what
Array.filter()
не обойтись:const as = (where, what) => where.split('').filter(v => what.includes(v)).length;