Position просто используется в примере, оно не является обязательным условием. Можно использовать и flex. В итоге требуется выровнять блок относительно центра так, чтобы cross axis проходила точно между 2 и 3 элементами. Как это сделать при помощи justify-content?
fallus, window.location.href в codepen не работает, поскольку выдает адрес текущей страницы codepen, который по определению не совпадет ни с одной ссылкой. А если вместо него подставить var curPath = "https://example.com"; (смоделировать адрес главной страницы), то поиск не покажет ни одной ссылки, а должен в этом случае найти первую ссылку
zendor, наверное, вы правы, другой. Мне нужно по клику внутри div запустить один обработчик, а по клику вне него - другой. Я предполагал это делать через if ... else. Ваша конструкция работает, но не пойму, как в нее вставить второй обработчик. Помогите, плз
Павел Корнилов, то же самое, с this вообще не работает, c dokument открываются по одному, но у меня еще навешен скроллинг открытой вкладки кверху окна для удобства чтения, так вот этот вариант даже с document ломает напрочь весь скроллинг, все улетает куда-то за горизонт.
У меня к вам вопрос. Итого есть три рабочих варианта, с которыми все работает как надо - и вкладки открываются по одной, и скроллинг подкручивает открытую аккурат под срез меню:
1) $(document.querySelectorAll('.spoiler.active:not(.user-click)')).click();
2) $(document.querySelectorAll('.spoiler.active:not(.user-click)')).triggerHandler('click');
3) $(document).find('.spoiler.active:not(.user-click)').triggerHandler('click');
В каждом из трех вариантов результат один и тот же. В чем разница между ними, в смысле чем одно лучше или хуже другого?
Dymok, не, что-то не то, теперь скроллит еще дальше, причем независимо, в первой строке прописать "-" или "+" и к тому же каждый раз на разное расстояние
Павел Корнилов, заменил код.
С этим фрагментом:
$('.spoiler').parent().on('click', '.spoiler', function (e) {
все работает так же, как в моем варианте.
А вот с этим:
$(this.querySelectorAll('.spoiler.active:not(.user-click)')).triggerHandler('click');
не работает, т.е. спойлер работает в обычном режиме, вкладки открываются-закрываются в любых количествах. А вот если вместо this прописать document, то все опять работает.
Павел Корнилов, Тимур Турсунбаев, принцип выборки классов понятен, спасибо за наводку. Вы управляете вкладками при помощи замены классов, у меня так не проходит, поскольку у меня спойлер не самописный, а стандартный движка, там навешаны свои обработчики, и у меня toggleClass нарушает работу внутреннего обработчика движка и у него крыша едет. Мне нужно 1) при клике на открытой вкладке ничего не делать (движок сам закроет ее), 2) а при клике по закрытой вкладке у нее самой классы не менять (движок сам ее откроет), а на открытых вкладках (если они есть открытые) вместо toggleClass программно кликнуть по ним. Как можно модифицировать ваш пример?
Тимур Турсунбаев, я не то чтобы не хочу на документ ставить событие, я не понял, что вы имеете в виду. Меня любой вариант устроит, в том числе и с событиями, задачу в общем виде я описал в предыдущем комментарии, буду благодарен за любые подсказки.
Антон, речь идет о вкладках спойлера. На странице несколько спойлеров, в каждом множество вкладок с фреймами и документами в них. Сейчас вкладки можно открывать произвольно в любых количествах и сочетаниях. Принципиально важно, чтобы вкладки открывались строго по одной на странице, т.е. при открытии закрытой вкладки предыдущая открытая (в этом спойлере или в другом на этой странице) закрывалась. Спойлер стандартный движка, поэтому переписать его код невозможно. Заменить на рукописный или на аккордеон муторно, страница довольно большая. К тому же аккордеон будет иметь свою логику, которая тоже не подходит. Вкладки спойлера имеют некий класс (spoiler), к которому при открытии вкладки движок добавляет класс active. Поэтому задача по клику на элементе с классом spoiler вызвать обработчик, которым программно кликнуть по элементу (или элементам, если по какой-то причине их несколько) с классом spoiler active. А если по какому-то глюку открытых оказалось несколько, то по клику с элементом spoiler active программно кликнуть по всем остальным с этим классом.
Антон, т.е. обработчик назначается при загрузке страницы, а после добавления класса страница не перезагружается, поэтому обработчик второго класса не видит... Так? Теперь понятно, но легче не стало. Проблема в том, что таких элементов на странице несколько с одинаковыми родительскими элементами, т.е. с одинаковым набором классов у этих родителей, а мне нужно выбрать именно этот единственный элемент, которому предыдущим обработчиком был добавлен второй класс. Как это сделать? Буксую...
Тимур Турсунбаев, да на codepen все работает, причем даже без (.a ...
Посмотрите, пожалуйста, этот вариант
Первым кликом добавляем элементу (b) класс (c), т.е. он теперь имеет класс (b c). По второму клику по этому же элементу должна быть вызвана функция для (b c) и залить его зеленым. Но этого не происходит. Что неправильно?