Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <script>
- function distributeBanners(container) {
- if (!container || container.dataset.bannersProcessed) return;
- const content = container.querySelector('.article-content');
- if (!content) return;
- const banners = Array.from(container.querySelectorAll('.banner-card-content'));
- if (!banners.length) return;
- const h2s = Array.from(content.querySelectorAll('h2'));
- let bannerIndex = 0;
- // Вставка перед каждым вторым h2
- h2s.forEach((h2, i) => {
- if (bannerIndex >= banners.length) return;
- if ((i + 1) % 2 === 0) {
- h2.before(banners[bannerIndex++]);
- }
- });
- // Остатки — вниз
- if (bannerIndex < banners.length) {
- banners.slice(bannerIndex).forEach(b => content.appendChild(b));
- }
- // Чтобы не обработать снова
- container.dataset.bannersProcessed = '1';
- }
- // =====================
- // 1. Первичный запуск
- // =====================
- document.addEventListener('DOMContentLoaded', () => {
- document.querySelectorAll('.article-wrapper')
- .forEach(wrap => distributeBanners(wrap));
- });
- // =====================
- // 2. Авто-отслеживание lazyload
- // =====================
- const observer = new MutationObserver(mutations => {
- for (const m of mutations) {
- m.addedNodes.forEach(node => {
- // ищем новые .article-wrapper
- if (node.nodeType === 1) {
- if (node.matches('.article-wrapper')) {
- distributeBanners(node);
- }
- // или если wrap вложен внутрь нескольких нод
- const innerWraps = node.querySelectorAll?.('.article-wrapper');
- innerWraps?.forEach(wrap => distributeBanners(wrap));
- }
- });
- }
- });
- // Наблюдаем за body — 100% поймает любые вставки
- observer.observe(document.body, {
- childList: true,
- subtree: true
- });
- </script>
Advertisement
Add Comment
Please, Sign In to add comment