$(document).click(function(e) {
const $target = $(e.target);
let $itemsToClose = $('.top-menu__item');
if ($target.hasClass('top-menu__link')) {
const $item = $target.closest('li');
$item.toggleClass('top-menu__item_open').children('ul').slideToggle();
$itemsToClose = $itemsToClose.not($item);
}
$itemsToClose
.removeClass('top-menu__item_open')
.children('ul')
.slideUp();
});
border: none
ему:.a-image {
border: none;
}
<a class="a-image"><img src="...
<div class="slide" data-slide="1">1</div>
<div class="slide" data-slide="2">1+1</div>
<div class="slide" data-slide="3">3.0001</div>
<div>
<span class="step" data-slide="1"></span>
<span class="step" data-slide="2"></span>
<span class="step" data-slide="3"></span>
</div>
data-slide
такое же, как у кнопки:$(document).on('click', '.step', function() {
$('.step.active, .slide.active').removeClass('active');
$(this).addClass('active');
$(`.slide[data-slide="${this.dataset.slide}"]`).addClass('active');
});
// по умолчанию сделаем активным первый слайд
$('.step').eq(0).click();
правильно ли использовать общий объект data
<clients-list :rows="clients" :headers="clientsTableHeaders"></clients-list>
Vue.component('clients-list', {
props: [ 'rows', 'headers' ],
...
});
clientsTableHeader.email.show <...> как это можно использовать при обработке списка клиентов
computed: {
activeHeaders() {
return this.headers.filter(n => n.show);
},
},
<thead>
<tr>
<th v-for="header in activeHeaders">{{ header.title }}</th>
</tr>
</thead>
<tbody>
<tr v-for="row in rows">
<td v-for="header in activeHeaders">{{ row[header.name] }}</td>
</tr>
</tbody>
preg_match_all('~<.+?>(.*?)<\/.+?>~', $str, $matches);
$result = $matches[1];
function getTexts($domNode) {
$result = [];
foreach ($domNode->childNodes as $n) {
if ($n->nodeType === XML_TEXT_NODE) {
$result[] = $n->nodeValue;
} else if ($n->nodeType === XML_ELEMENT_NODE) {
array_push($result, ...getTexts($n));
}
}
return $result;
}
$doc = new DOMDocument();
$doc->loadHTML($str);
$result = getTexts($doc);
$doc = new DOMDocument();
$doc->loadHTML($str);
$result = [];
foreach ((new DOMXPath($doc))->query('//text()') as $n) {
$result[] = $n->nodeValue;
}
Пробовал приспособить setTimeout, пробовал им вызывать функцию, а к функции присвоить название.. Но не сработало..
Что я делаю не так?
SELECT f.*, GROUP_CONCAT(fc.cat_id)
FROM film f
LEFT JOIN film_category fc ON fc.film_id = f.id
GROUP BY f.id
SELECT *
FROM oc_product_option
WHERE product_id IN (
SELECT product_id
FROM oc_product_option
GROUP BY product_id
HAVING count(product_id) > 1
)
#red {
transition: opacity 0.2s;
}
#red.hidden {
opacity: 0.5;
}
$('#red').click(e => $(e.target).toggleClass('hidden'));
// или
document.querySelector('#red').addEventListener('click', e => {
e.target.classList.toggle('hidden');
});
const options = [ 'first', 'second', 'third', 'fourth' ];
const $table = $('table');
$('button').click(function() {
$table.append(`
<tr>
<td>
<select>
<option disabled selected>-</option>
${options.map(n => `<option>${n}</option>`).join('')}
</select>
</td>
<td>
<button class="del">del</button>
</td>
</tr>
`);
updateDisabled();
});
$table
.change(updateDisabled)
.on('click', '.del', function() {
$(this).closest('tr').remove();
updateDisabled();
});
function updateDisabled() {
const $select = $table.find('select');
const selectedOptions = $select.get().map(n => n.value);
$select.find('option').prop('disabled', function() {
return selectedOptions.includes(this.value);
});
}
300
---> '300px'
.#xxxten.big {
width: 300px;
}
document.querySelector('#xxxten').addEventListener('click', function() {
this.classList.toggle('big');
});