Загружать файл CSS, только если элемент с классом присутствует на странице

Я пытаюсь оптимизировать загрузку файлов CSSS, так как загружаю несколько больших файлов CSS на страницы, где они не используются. Есть ли способ поставить их в очередь, только если элемент присутствует с классом на этой странице.

Однако я пробовал следующее, это не работает:

jQuery(document).ready(function($) {
    //Script Checkers
    var wowJS = $('.wow');

    if (wowJS.length > 0) {
        $.getScript('/wp-content/themes/gowebsites/gw-addon/js/wow.js', function() {
            new WOW().init();
        });

        var head = document.getElementsByTagName('head')[0];
        var cssNode = document.createTextNode("link");

        cssNode.href = "/wp-content/themes/gowebsites/gw-addon/css/animations.css";
        cssNode.rel = "stylesheet";
        //console.info("CSS Node: "+cssNode); = [object Text]

        head.appendChild(cssNode);
    }
});

Я видел функции, которые работают для добавления файлов css в голову, однако ни одна из них не позволяет сделать это условным.

Обновлено: с тех пор я только что использовал функцию jQuery getScripts(), однако мне все еще нужно знать, как добавить css в заголовок, только если это необходимо.

Обновлено: Для дальнейшего использования для всех, это окончательный рабочий код:

jQuery(document).ready(function($) {
    //Script Checkers
    var wowJS = $('.wow');

    if (wowJS.length > 0) {
        $.getScript('/wp-content/themes/gowebsites/gw-addon/js/wow.js', function() {
            new WOW().init();
        });

        var head = document.getElementsByTagName('head')[0];
        var cssNode = document.createElement("link");

        cssNode.href = "/wp-content/themes/gowebsites/gw-addon/css/animations.css";
        cssNode.rel = "stylesheet";

        head.appendChild(cssNode);
    }
});
appendChild() принимает новый узел или элемент, а не строку. Также обратите внимание, что если вы включили jQuery на страницу, вы можете упростить это с помощью $.getScript()
Rory McCrossan 10.04.2019 15:56

Я также пытался просто добавить, но безуспешно

Daniel Vickers 10.04.2019 15:57

Думая об этом неправильно относительно wp_enqueue. Вы бы условно поставили в очередь на основе любых условий, которые сделали бы этот класс доступным на странице. Не уверен, что это категории, используемый шаблон страницы, контент и т. д.

charlietfl 10.04.2019 15:58

Единственным условием было бы использование шорткода и присутствие элемента с классом, который, я не считаю, лучше всего сделать или сделать в php?

Daniel Vickers 10.04.2019 16:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
4
1 250
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сначала создайте узлы, затем добавьте их, используя метод appendChild(), например:

var scriptNode = document.createElement("script");
scriptNode.src = "/wp-content/themes/gowebsites/gw-addon/js/wow.js";

var cssNode = document.createElement("link");
cssNode.href = "/wp-content/themes/gowebsites/gw-addon/css/animations.css";
cssNode.rel = "stylesheet";

head.appendChild(scriptNode);
head.appendChild(cssNode);

И если я захочу загрузить скрипт в нижний колонтитул, как добавить область нижнего колонтитула прямо внутри закрывающего тега body?

Daniel Vickers 10.04.2019 15:59

Вызов appendChild() на узле body вместо head

Rory McCrossan 10.04.2019 16:01

Как сказал @RoryMcCrossan, вам нужно просто указать элемент

Zakaria Acharki 10.04.2019 16:02

Я обновил свой ответ своим текущим кодом, он не создает и не связывает элементы. И я использовал alert(), чтобы проверить значение wowJS, которое возвращает «1».

Daniel Vickers 10.04.2019 17:03

createElement действительно исправляет это, не получил уведомления о вашем комментарии, и я просто сам наткнулся на ответ, лол

Daniel Vickers 10.04.2019 17:57

Хорошая работа @Daniel

Zakaria Acharki 10.04.2019 18:26

Вы должны использовать insertAdjacentHTML

head.insertAdjacentHTML("afterend",'<script language = "javascript" src = "/wp-content/themes/gowebsites/gw-addon/js/wow.js"></script>');
head.insertAdjacentHTML("afterend",'<link href = "/wp-content/themes/gowebsites/gw-addon/css/animations.css" rel = "stylesheet">');

Другие вопросы по теме